如何解决Http持久连接限制
|Clients that use persistent connections SHOULD limit the number of simultaneous
connections that they maintain to a given server. A single-user client SHOULD
NOT maintain more than 2 connections with any server or proxy.
[..]
我对“ SHOULD”的不确定性尤其不确定。为什么?
我知道HTTP持久连接(也称为HTTP保持活动)是使用同一TCP连接发送和接收多个HTTP请求/响应的想法,而不是为每个请求/响应对都打开一个新的HTTP连接。我知道使用持久连接对于提高HTTP性能非常重要。
每个服务器的2个连接限制是否已预定义?
请求何时将使用现有连接或获取新连接?
假设我有一个包含以下图像引用的HTML页面:
<img src=\"http://example.com/image1.gif\"/>
<img src=\"http://example.com/image2.gif\"/>
<img src=\"http://example.com/image3.gif\"/>
<img src=\"http://example.com/image4.gif\"/>
我的服务器的keep-alive指令已打开:术语“持久连接”在这里发生了什么?与每服务器2个同时连接数限制类似的优化规则/技巧是否有效?
<img src=\"http://example.com/image1.gif\"/>
<img src=\"http://example.com/image2.gif\"/>
<img src=\"http://example2.com/image3.gif\"/>
<img src=\"http://example2.com/image4.gif\"/>
谢谢
解决方法
不要太在意“应该”。
IE有时仅允许2个同时连接。即使在那时,也可以选择删除限制(通过\'hack \')。
目前,在大多数浏览器(包括firefox,safari)中,该限制为8。 IE8每个主机有6个连接限制。
可以想象,每个主机2个连接太少了。您将无法从主机加载页面,而同一主机上有2个正在进行的下载!
如果您使用的是connection:keep-alive标头,则所有五个映像都将加载在同一TCP连接上,而不是在连接:关闭的情况下终止连接并重新建立连接。
这是低效的,因为每次请求图像时都必须重新进行三向TCP握手!
在HTTP 1.1下,除非另有说明,否则所有连接均保持活动状态:
连接方式:关闭
另一方面,您还具有HTTP管道传输(请参阅Mike Caron的回答),它不等待一个请求返回就发送另一个请求。这是由firefox实现的(您可以在about:config中看到/禁用),但这与每个主机的最大连接数不同。
也:
如果您不通过流水线使用持久连接,则将建立多个连接。在关闭前一个请求之前发送一个请求。由于最大连接数限制,这将阻止。
, 客户端可以使用多个连接来并行下载资源。例如,在您的示例中,它可能决定同时在两个连接上下载
image1.gif
和image2.gif
。如果我们假设image1.gif
首先完成,那么它将在该连接上将image3.gif
排队。依此类推。
我没有任何证据,但是我强烈怀疑大多数浏览器在下载页面上的所有资源后将关闭所有连接。如果用户单击到另一个页面,它将打开新的连接。
两个连接的限制是一个约定,比什么都重要。没有必要阻止浏览器打开50。但是,在此级别上,带宽使用是限制因素,因此大多数浏览器(我怀疑)会将自己限制在少数几个连接上。
同样,没有什么阻止它们的具体方法,但是拥有许多联系的回报却越来越小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。