6

根据 HTTP 规范 (w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4),HTTP 客户端应该限制它们的连接:

使用持久连接的客户端应该限制他们维护到给定服务器的同时连接的数量。单用户客户端不应与任何服务器或代理保持超过 2 个连接。

不同的供应商以不同的方式实现此限制:http: //www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/

但。此限制适用于每个选项卡、每个浏览器实例还是全局适用于浏览器的所有实例?弹出窗口(对话框)是否被视为选项卡或独立选项卡的一部分?

对于 websockets,每个源的连接限制是否适用于每个选项卡、浏览器实例或全局?

4

2 回答 2

7

浏览器

对于不同的浏览器、浏览器版本或互联网连接速度,实现细节肯定会有所不同(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(如果获得批准)。引用相关部分(来自https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p1-messaging-21#section-6.2.3):

6.2.3. 并发

客户端应该限制他们维护到给定服务器的同时连接的数量。

以前的 HTTP 版本给出了一个特定的连接数作为上限,但发现这对于许多应用程序来说是不切实际的。因此,该规范没有规定特定的最大连接数,而是鼓励客户端在打开多个连接时保持保守。

通常使用多个连接来避免“行头阻塞”问题,其中需要大量服务器端处理和/或具有大有效负载的请求会阻塞同一连接上的后续请求。但是,每个连接都会消耗服务器资源。此外,使用多个连接可能会在拥塞的网络中导致不良的副作用。

请注意,服务器可能会拒绝他们认为滥用的流量,包括来自客户端的过多连接。

于 2014-04-11T05:50:25.753 回答
3

我没有对此进行详尽的研究...我发现一台计算机可以打开许多浏览器或浏览器选项卡,并且每个选项卡都将保持活动的 websocket 连接。

然而,这对于服务器端事件(SSE 或 eventsource() )并不相同 http://www.html5rocks.com/en/tutorials/eventsource/basics/

我在各种论坛上读到过,当打开超过 x 个选项卡(我认为 chrome 中有 6 个)时,人们会遇到 SSE 问题,这是因为浏览器将同时连接的数量限制为单个 IP 地址。

就好像 SSE 在页面的生命周期内保持连接。然而,对于 websockets,情况并非如此。

于 2014-04-11T14:34:06.403 回答