正如@mata 所说,这取决于客户。
然而,一个明确的用例是连接合并。
在 HTTP/1.1 下,域通常是分片的(例如,www.example.com 也可能有一个 static.example.com 域用于提供静态资产)。这有两个原因:
在 HTTP/2 下有一个连接,并行下载的限制是更高的流限制(通常是 100-150,但也可以是无限制的)。此外,使用 HPACK 标头压缩大 cookie 对性能的影响较小(尽管仍然可能存在安全问题,这可能是无 cookie 域的另一个原因)。
那么,我们现在应该完全放弃分片域吗?那些不支持 HTTP/2 的客户端呢?虽然支持非常好,但它并不普遍,即使他们的浏览器可以使用代理连接(例如公司连接或防病毒软件),通常也无法使用它。
浏览器使用连接合并将几乎相同的连接(通常是具有相同 IP 地址和相同 TLS 证书的连接)合并为一个连接,而不是在使用 HTTP/2 时打开单个连接,并允许 HTTP/1.1 连接继续将这些连接视为单独的域。Daniel Haxx 拥有关于浏览器如何实际实现的最好的博客文章(尽管在撰写本文时它已经有一年半的历史了,所以这可能已经改变了)。总而言之,Chrome 如您所愿地使用它,Firefox(过度?)积极地在尽可能多的情况下进行合并(也许有些情况不应该这样做!)而 Edge 和 Safari 不会在全部。
如果连接在不应该合并时合并,服务器可以使用 421 HTTP 状态代码进行响应,这基本上意味着“你在做什么,这不是对我的请求!!” 然后浏览器可以使用单独的连接重试。
看起来 HTTP/2 很快就会添加ORIGIN 框架,这将允许服务器以“嘿,如果你愿意,我也可以为你提供 api.example.com 请求”样式的消息响应任何请求。即使 IP 地址不匹配(这让一些人担心它的安全隐患!)。
虽然我们在讨论这个话题,但并不总是这样,因为单个域也总是使用一个连接。阅读Jake Archibald 在 HTTP/2 Push 上的优秀文章,它表明存在多种情况(总结为:对于非凭据请求,在 Edge 的单独选项卡中打开相同的域时,或者甚至在Safari 的相同选项卡)。
这取决于客户.
http://httpwg.org/specs/rfc7540.html#HttpExtra
客户端不应该打开与给定主机和端口对的多个HTTP/2连接,其中主机是从URI,选定的备用服务[ALT-SVC]或配置的代理派生的.
...
客户端可以使用不同的服务器名称指示[TLS-EXT]值打开到同一IP地址和TCP端口的多个连接,或者提供不同的TLS客户端证书,但应该避免使用相同的配置创建多个连接.
...
被到原始服务器制成,或者直接或者通过使用CONNECT方法(第8.3节)创建了隧道连接,可能被重新用于与多个不同的URI权限组件的请求.只要原始服务器具有权威性,就可以重用连接(第10.1节).对于没有TLS的TCP连接,这取决于已解析为相同IP地址的主机.
因此,并没有真正的硬性要求,因此如果客户端有很好的理由进行多个连接而不是重复使用,则允许这样做.
特别是如果两个域使用不同的TLS证书(不是两个名称都作为SubjectAltNames存在的证书),我希望看到每个域都有一个单独的连接.
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |