gpt4 book ai didi

linux - HTTP2:异域同IP,多连接还是单连接?

转载 作者:IT王子 更新时间:2023-10-29 00:26:03 26 4
gpt4 key购买 nike

在 HTTP2 中:

所以当请求一个html页面,有多个域名(www.example.com, api.example.com...),据说会有多个连接。

但是如果这些域共享同一个 IP 怎么办?是否还有多个连接?

最佳答案

正如@mata 所说,这取决于客户。

然而,一个明确的用例是连接合并。

在 HTTP/1.1 下,域通常被分片(例如 www.example.com 可能也有一个 static.example.com 域来提供静态 Assets )。这有两个原因:

  1. 打破浏览器经常使用的每个域 6-8 个连接的限制,并允许并行下载更多内容。
  2. 拥有所谓的“无 cookie”域,从而节省了为不需要它们的静态 Assets (例如图像、css、javascript)发送这些 HTTP header 的开销。

在 HTTP/2 下只有一个连接,并行下载的限制是更高的流限制(通常为 100-150,但也可以是无限制的)。此外,通过 HPACK header 压缩,大型 cookie 对性能的影响较小(尽管仍然可能存在安全问题,这可能是无 cookie 域的另一个原因)。

那么,我们现在应该完全放弃分片域吗?那些不支持 HTTP/2 的客户端怎么办?虽然支持非常好,但并不普遍,代理连接(例如公司连接或防病毒软件)背后的人通常无法使用它,即使他们的浏览器可以。

浏览器使用连接合并将几乎相同的连接(通常是具有相同 IP 地址和相同 TLS 证书的连接)合并为一个连接,而不是在使用 HTTP/2 时打开一个连接,并允许 HTTP/1.1 连接继续看到这些作为单独的域。 Daniel Haxx has the best blog post on how this is actually implemented by browsers (尽管在撰写本文时它已经有一年半的历史了,所以这可能已经改变了)。总而言之,Chrome 按照您的预期使用它,Firefox(过度?)在尽可能多的情况下(可能在某些情况下不应该!)积极地进行合并,而 Edge 和 Safari 不会在以下情况下进行合并全部。

如果连接在不应该合并的情况下合并,服务器可以使用 421 HTTP 状态代码进行响应,这基本上意味着“你在做什么,这不是我的请求!!”然后浏览器可以使用单独的连接重试。

看起来 HTTP/2 也将很快添加 ORIGIN Frame这将允许服务器以“嘿,如果你愿意,我也可以为你提供 api.example.com 请求”风格的消息来响应任何请求。即使 IP 地址不匹配(这让一些人担心 security implications of that !)。

虽然我们正在讨论这个话题,但情况并非总是如此,因为单个域也将始终使用一个连接。阅读Jake Archibald's excellent post on HTTP/2 Push这表明在多种情况下情况并非如此(总结为:对于非凭证请求,当在 Edge 的单独选项卡中打开相同的域时,或者甚至在 Safari 的相同选项卡中随机打开)。

关于linux - HTTP2:异域同IP,多连接还是单连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48701719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com