HTTP/2 是不是提高了每个主机的连接限制?

Posted

技术标签:

【中文标题】HTTP/2 是不是提高了每个主机的连接限制?【英文标题】:Is the per-host connection limit raised with HTTP/2?HTTP/2 是否提高了每个主机的连接限制? 【发布时间】:2016-08-18 13:44:25 【问题描述】:

浏览器对每个主机的并行 XHR 数量有限制(现在大约 6 个)。

此限制是否适用于多路 HTTP/2 连接?

【问题讨论】:

【参考方案1】:

在使用 HTTP/1.1 时,浏览器将每个域的连接数限制为 6-8 个,具体取决于浏览器实现。 这允许每个域最多 6-8 个并发请求。

使用 HTTP/2,浏览器在每个域中仅打开 1 个连接。 不过,得益于 HTTP/2 协议的多路复用特性,每个域的并发请求数不限于 6-8 个,而是几乎无限制。

实际上是无限的,因为浏览器和服务器可以通过称为SETTINGS_MAX_CONCURRENT_STREAMS 的HTTP/2 configuration parameter 限制并发请求的数量。

典型的限制在 100 左右(Firefox 的默认值 network.http.spdy.default-concurrent - 注意这里的 spdy 名称:它是 HTTP/2 协议的协议祖先)但可能更大(或者,不太常见,更小),取决于浏览器实现和您连接的服务器。

预计这些限制会随着 HTTP/2 的演变和更广泛的使用而变化(与 HTTP/1.1 的情况相同:浏览器开始时有 2 个连接,多年后达到 6-8 个使用、经验和调整)。

我认为浏览器如何处理正常浏览和使用 XHR 的连接数和并发请求之间没有任何区别,因此上述解释也适用于 XHR。

【讨论】:

客户端和服务器都可以指定SETTINGS_MAX_CONCURRENT_STREAMS。如果客户端为服务器指定一个值,则表示服务器能够推送多少资源的限制。如果服务器将值指定给客户端,则表明客户端能够请求多少项。我不确定 Firefox 是否仅使用 network.http.spdy.default-concurrent 来指定服务器的限制,或者也将其请求限制为相同的值。 如何观察给定服务器的 SETTINGS_MAX_CONCURRENT_STREAMS 是什么? 该设置未协商。服务器告诉客户端它支持多少并发流,客户端告诉服务器它支持多少并发推流。要知道值,只需查看两侧的配置即可。

以上是关于HTTP/2 是不是提高了每个主机的连接限制?的主要内容,如果未能解决你的问题,请参考以下文章

限制来自本地主机的 MySQL 连接以提高安全性

Android BLE 中每个连接发送的数据包数量是不是有限制?

MQ 是不是仍然有每个线程连接的限制?

H2 是不是为每个远程连接生成一个新线程?那么,有限制吗?

虚拟主机的IIS连接数和访问流量限制各是什么

Firebase主机在同一个项目中支持多少个域名(不是子域名)?