根据HTTP规范(w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4),HTTP客户端应限制其连接:
使用持久连接的客户端应该限制它们维护到给定服务器的同时连接数。单用户客户端不应该与任何服务器或代理保持两个以上的连接。
不同的供应商以不同的方式实施此限制:http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/
但是。这个限制适用于每个选项卡,每个浏览器实例还是全局适用于浏览器的所有实例?弹出窗口(对话框)是否被视为选项卡或独立选项卡的一部分?
对于websockets,每个源的连接限制是否适用于每个选项卡,浏览器实例或全局?
答案 0 :(得分:6)
<强>浏览器强>
对于不同的浏览器,浏览器版本或互联网连接速度,实施细节必然会有所不同(IE8在拨号时使用2个连接,否则最多使用6个连接)。
此外,这些限制通常是用户可配置的(即Mozilla中的network.http.max-connections-per-server),并且不应基于浏览器版本假设特定值。但是,脚本可以访问实际值,例如IE中的window.maxConnectionsPerServer。
但是。这个限制适用于每个选项卡,每个浏览器实例,还是全局适用于浏览器的所有实例?
我发现的唯一相关信息是IE(http://social.msdn.microsoft.com/Forums/ie/en-US/a46bb0ba-419d-43ec-ad1b-f9596d508ca3/simultaneous-http-connection-limit):
连接限制是针对每个流程的,浏览器将确定流程创建作为网站所有者,您无法真正改变它。这个过程可以在多个标签/窗口之间共享,也可能不共享,这取决于您控制之外的许多因素
有关浏览器的更多最新数据,请访问www.browserscope.org/?category=network
<强> RFC 强>
有一个更新的草案,它废弃了RFC2616(如果批准的话)。 引用相关部分(来自http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-21#section-6.2.3):
6.2.3。并发
客户端应该限制它们的同时连接数 维护到给定的服务器。
以前的HTTP修订版提供了特定数量的连接 天花板,但这被发现对许多应用来说是不切实际的。 因此,本规范并未强制要求特定的最大值 连接数量,但鼓励客户 打开多个连接时保守。
通常使用多个连接来避免“线头” 阻断&#34;问题,其中一个请求占用重要的服务器 - 边处理和/或具有大的有效载荷阻塞后续请求 在同一个连接上。但是,每个连接都会占用服务器 资源。此外,使用多个连接可能会导致 在拥挤的网络中存在不良副作用。
请注意,服务器可能拒绝他们认为滥用的流量, 包括来自客户的过多连接。
答案 1 :(得分:3)
我没有详尽地研究过这个......我发现一台计算机可以打开很多浏览器或浏览器标签,每个标签都可以保持一个活动的websocket连接。
然而,这与服务器端事件(SSE或eventsource())不同 http://www.html5rocks.com/en/tutorials/eventsource/basics/
我已经在各种论坛上阅读过,当超过x个标签打开时,人们会遇到SSE问题(我认为是Chrome中的6个),这是因为浏览器会限制同时连接到单个IP地址的数量。
就好像SSE在页面的生命周期内保持连接。然而,对于websockets,情况并非如此。