- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 HTTP2 中:
所以当请求一个html页面,有多个域名(www.example.com, api.example.com...),据说会有多个连接。
但是如果这些域共享同一个 IP 怎么办?是否还有多个连接?
最佳答案
正如@mata 所说,这取决于客户。
然而,一个明确的用例是连接合并。
在 HTTP/1.1 下,域通常被分片(例如 www.example.com 可能也有一个 static.example.com 域来提供静态 Assets )。这有两个原因:
在 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/
我是一名优秀的程序员,十分优秀!