Angularjs 使用HTTP/2时缓存的请求

Angularjs 使用HTTP/2时缓存的请求,angularjs,ssl,http2,Angularjs,Ssl,Http2,我有一个奇怪的行为,我无法用http/2解释: 在oauth身份验证过程中,我尝试使用B.domain提供程序登录A.domain。当两台服务器都启用了HTTP/2,并且使用相同的ssl证书(通配符)时,在相同的IP上(使用TLS SNI也是如此),对B.domain的请求(我在地址栏中有url B.domain,标题)被发送到a.domain! 我可以用firefox和chrome复制,但不能用safari。 我们使用的是angular 1.6,但我怀疑这是JS的问题。 如果域不同,问题就会消

我有一个奇怪的行为,我无法用http/2解释:

在oauth身份验证过程中,我尝试使用B.domain提供程序登录A.domain。当两台服务器都启用了HTTP/2,并且使用相同的ssl证书(通配符)时,在相同的IP上(使用TLS SNI也是如此),对B.domain的请求(我在地址栏中有url B.domain,标题)被发送到a.domain! 我可以用firefox和chrome复制,但不能用safari。 我们使用的是angular 1.6,但我怀疑这是JS的问题。 如果域不同,问题就会消失


这可能是chrome和firefox中http/2实现中的错误吗?

在http/2下,连接可以在一个称为聚合的过程中重用

这是为了让HTTP/2获得充分的好处,即使使用分片来提高HTTP/1.1连接的性能——这在HTTP/2下不再必要,事实上对性能有害(因为设置额外的连接需要客户端和服务器上的资源)

这篇博文提供了更多关于HTTP/2连接合并以及不同浏览器如何以不同方式合并的详细信息:


然而,当你说它“被发送到一个域名”时,我感到困惑。应该重用连接,但是web服务器应该在适当的域下处理它。如果没有发生这种情况,则听起来像是您正在使用的web服务器上的HTTP/2实现中的错误。

是的,我可以从a.domain看到默认页面,即使所有标题和导航栏都指示B.domain。这就是可怕的部分。在inspector中,我可以看到一个标题“Host:B.domain”,然而,响应标题显然来自a.domain。firefox上有一个“编辑并重新发送”按钮,如果我使用它,并再次发送相同的请求,该页面将由B.domain提供服务。如果我在firefox中禁用http/2,问题就会消失。我已经看过了你提到的文章,很可能就是我遇到的问题。谢谢分享你在这方面的知识,我正在验证你的答案:)它仍然没有意义。应该重用连接,但服务器仍应处理该连接并返回适当的内容。您使用的是哪台服务器,因为它听起来像是跨域泄漏信息的bug。我们使用默认的openshift路由器,所以它是HAProxy