将服务器发送事件与HTTP2一起使用时,仍然有实际的6个连接限制吗?

我一直在四处搜寻,但似乎找不到这个问题的直接答案,有些人提供了矛盾的答案。

大多数浏览器的每个域都有6个连接限制。因此,例如,如果您的网站是example.com,并且在页面加载时初始化了持久的“服务器发送事件”连接,则最终用户可以再打开该标签五次,但第六个标签根本不会加载,因为6该域已建立持久的TCP连接。

现在,我看到有人说这只是SSE的一个常年问题,唯一的选择是骇人的解决方法,包括检测此连接限制,然后关闭隐藏选项卡中的连接或关闭这些选项卡中的连接并进行切换进行长时间轮询。

但是,一些人们声称HTTP2通过多路复用解决了这个问题,因此您可以根据需要在该网站上打开任意多个标签,因为所有标签都多路复用到同一TCP连接上。我找不到此声明的主要来源,也找不到任何具有重大授权的人。

那么,是真的吗? HTTP2复用是否解决了网站域的通用6连接限制问题?或者,如果他们想支持网站上的许多打开的标签页,则基本上是一个需要使用websocket的人吗?

a119919756 回答:将服务器发送事件与HTTP2一起使用时,仍然有实际的6个连接限制吗?

我已经在Jetty中实现了HTTP / 2。

this answer中所述,使用HTTP / 2,浏览器可以向服务器发出的并发请求的最大数量大大增加-不是无限的,而是从6-8增加到大约100。

是的,多路复用实际上解决了这个问题(除非您打开超过100个左右的标签)。

请注意,此值是由服务器配置的,因此服务器向客户端发送配置的最大并发请求数设置为小数是可能的,但实际上服务器已经决定了一个大约100的数字。

话虽如此,您还想阅读this other answer来进行有关SSE与WebSocket的讨论。

,

该限制适用于浏览器(而非服务器端)和varies per browser

至少从http / 1.1开始。我一直无法找到特定于http / 2的任何配置,因此我认为我们必须假设限制仍然存在。我认为保留它们是为了防止滥用或意外的DoS攻击。

https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/Mozilla_networking_preferences

请参见network.http.max-persistent-connections-per-server。 (您也可以在about:config中看到它。)

这是我在Firefox中看到的用于“连接”过滤的所有设置:

enter image description here

我想知道SSE是由http.max-connections还是websocket.max-connections控制? (暂时忽略任何每个域的限制。)

您当然也可以尝试一下(我上面链接的问题中有示例脚本)。但是除非您控制所有客户端的配置,否则必须假定某些人的运行限制为6。

本文链接:https://www.f2er.com/2983128.html

大家都在问