我有一个无法用 http/2 解释的奇怪行为:
在 oauth 身份验证过程中,我尝试使用 B.domain 提供商登录 A.domain。当两个服务器都启用了 HTTP/2,并使用相同的 ssl 证书(通配符)时,在相同的 IP 上(因此使用 TLS SNI)对 B.domain 的请求(我在地址栏中有 url B.domain,并且 header )被发送到 A.domain! 我可以用 firefox 和 chrome 重现这个,但不能用 safari。 我们使用的是 angular 1.6,但我怀疑这是 JS 问题。 如果域不同,问题就会消失。
会不会是 chrome 和 firefox 的 http/2 实现中的错误?
最佳答案
在 HTTP/2 下,连接可以在称为合并的过程中重复使用。
这是为了允许完整的 HTTP/2 优势,即使已使用分片来提高 HTTP/1.1 连接的性能——这在 HTTP/2 下不再需要并且实际上对性能不利(因为设置了额外的连接占用客户端和服务器上的资源)。
这篇博文提供了更多关于 HTTP/2 连接合并以及不同浏览器如何以不同方式合并的详细信息:https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/
但是,当您说它“发送到 A.domain”时,我感到很困惑。 连接 应该被重用,但是网络服务器应该在适当的域下处理它。如果这没有发生,那么这听起来像是您正在使用的 Web 服务器上的 HTTP/2 实现中的错误。
关于angularjs - 使用 HTTP/2 时缓存的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44162263/