【问题标题】:Should simultaneous HTTP connections to a new HTTP 1.1 server create one connection or several connections?与新 HTTP 1.1 服务器的并发 HTTP 连接应该创建一个连接还是多个连接?
【发布时间】:2014-11-13 18:22:46
【问题描述】:

问题

如果 2 个 HTTP 请求同时从新鲜的同一服务器发出,例如GET /image1.png HTTP/1.1 & GET /image2.png HTTP/1.1 之前没有连接到服务器。那么应该建立 1 个 TCP 连接还是 2 个?


信息

Persistent connections supported by default in HTTP 1.1。 HTTP 1.0 使用Connection: Keep-Alive

阅读RFC 似乎很清楚,如果上述请求一个接一个地发出,那么第二个请求应该重用连接。

HTTP Pipelining 正在向同一个连接发送多个请求,而无需先等待响应。我不确定这是否适合答案。

【问题讨论】:

  • 这听起来完全取决于你使用的 http 库
  • @FrederickCheung:问题是他们是否应该。这个问题的答案不依赖于单一的实现。

标签: http


【解决方案1】:

如果从新鲜的同时向同一服务器发出 2 个 HTTP 请求,例如获取 /image1.png

如果请求是由浏览器同时发出的(并且没有 HTTP 代理服务器),那么将有两个连接到服务器(除非启用了http pipelining)。根据关于流水线的维基百科文章,

在所有主流浏览器中,只有基于 Presto 布局引擎的 Opera 具有默认启用的完整工作实现。在所有其他浏览器中,HTTP 管道被禁用或未实现。

Internet Explorer 8 不会对请求进行管道传输,因为担心代理有问题和行头阻塞。

Mozilla 浏览器(例如 Mozilla Firefox、SeaMonkey 和 Camino)支持流水线,但默认情况下它是禁用的。默认情况下禁用流水线,以避免出现行为不端的服务器问题。启用流水线后,Mozilla 浏览器会使用一些启发式方法,尤其是关闭旧 IIS 服务器的流水线。

Konqueror 2.0 支持流水线,但默认禁用。

Google Chrome 在稳定版本中支持 HTTP 流水线作为非默认选项(从版本 18 开始)。目前还不支持流水线 HTTPS。[11]从版本 26 开始,在 Chrome 中启用 HTTP 管道的标志已被禁用。

所以,可能有两个连接。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多