【问题标题】:Lack of TCP Connection Reuse缺乏 TCP 连接重用
【发布时间】:2013-10-26 06:24:25
【问题描述】:

当我加载一个显示的网页时,为什么要为每个图像的 HTTP 请求打开一个新的 TCP 连接?为什么在页面加载期间没有重复使用单个 TCP 连接?

【问题讨论】:

  • 这是题外话。但是,想象一下电话呼叫与 TCP 连接相同。如果您需要给其他人打电话(图片),您需要打一个新电话。请查看Help - On Topic Quetions
  • 关注 stackoverflow.com/a/12795169/986760 可能有助于那些将管道衬里与多个 tcp 连接混淆的人清楚地看到图片
  • @ErikPhilips a 从同一站点获取另一个图像不需要新的连接。

标签: http web tcp


【解决方案1】:

我认为浏览器通常会打开多个连接,以便它可以并行加载内容。另一种可能性是服务器可能在发送完图像文件后关闭连接,从而强制浏览器创建新连接。

【讨论】:

    【解决方案2】:

    浏览器还结合了一种称为 HTTP 管道的技术,其中现有的 TCP 连接用于多个 HTTP 请求,但问题是所有传入的 HTTP 响应应该与发送的请求的顺序相同。

    HTTP 流水线:

    欲了解更多信息,请访问page

    【讨论】:

      【解决方案3】:

      尽管已经引用的大多数原因都是正确的(并且我赞成),即您可能需要通过不同的连接获取不同的资源,例如一个加载徽标,其他加载页面数据等,管道衬里并非总是可行的,而且它会尝试并行执行操作。

      不过,多个 TCP 连接的开销会影响 http 整体变慢。这就是为什么 google 一直在努力加快速度,新模型 http 2.0 将使用单个 http 连接。

      Details 是几天前在黑客新闻上发布的,基准测试非常令人印象深刻,尽管它还有其他几个因素,例如使用较少的字节数进行协议开销。

      SPDY 是 google 自己的早期版本

      【讨论】:

      • 先生,您是说每个选项卡可能有多个 TCP 连接,因为选项卡中的每个网页都包含要下载的大量资源/内容?
      • 是的,确实如此。即使是非常琐碎的请求,也会使用两个连接,其中一个单独下载 logo。
      • 你能给我一个使用流水线的实际例子吗?网页示例??
      • 看看这个 Q&A stackoverflow.com/a/12795169/986760 显示 chrome 的两个请求
      • @Subbu 我不确定你的问题,流水线是在同一个连接中提交多个 get 请求(除非它因大小而被分段,否则是同一个数据包)。仍然有一个 tcp 连接。我们上面所说的不止一个 tcp 连接,它确实用于单个 http 页面获取。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2015-04-08
      • 2012-08-02
      相关资源
      最近更新 更多