对于 HTTP/1.0,过去每个域的建议限制为 2 个连接。最近的 HTTP RFC 放宽了这个限制,但仍然警告在打开多个连接时要保守:
According to RFC 7230, section 6.4, "a client ought to limit the number of simultaneous open connections that it maintains to a given server".
更具体地说,除了 HTTP/2,如今,浏览器在使用 HTTP/1.1 时将每个域限制为 6-8 个连接。根据我的阅读,这些准则旨在缩短 HTTP 响应时间并避免拥塞。
有人可以帮助我了解如果按域打开许多连接,拥塞和响应时间会发生什么情况吗?这听起来不像是 HTTP 服务器问题,因为它们可以处理的连接量似乎是一个实现细节。上面的解释好像是关于TCP性能的?对于 HTTP 客户端为何限制每个域的连接数,我找不到更准确的解释。
最佳答案
这样做的主要原因是服务器端的资源。
假设您有一台运行 Apache 的服务器,默认有 256 个工作线程。想象一下,该服务器正在托管一个包含 20 个图像的索引页面。现在假设有 20 个客户端同时连接并下载索引页面;这些客户端中的每一个在获取页面后关闭这些连接。
由于他们每个人现在都将建立连接来下载图像,您可能会看到连接呈指数增长(或者我想是乘法增长)。考虑一下如果每个客户端都配置为同时建立最多 10 个并行连接以优化带有图像的页面显示,会发生什么情况。这使我们很快达到 400 个同时连接。这几乎是 Apache 可用工作进程数量的两倍(同样,默认情况下,使用预 fork )。
对于服务器,必须平衡资源才能满足最可能的负载,但客户端通过限制连接来极大地帮助解决这个问题。如果每个客户端都能自由地与服务器并行建立 100 多个连接,我们将很快对大量主机进行 DoS 攻击。 :)
关于http - 为什么 HTTP/1.1 建议保守地打开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53597611/