【问题标题】:Request cached when using HTTP/2使用 HTTP/2 时缓存的请求
【发布时间】:2017-10-25 00:39:09
【问题描述】:

我有一个奇怪的行为,我无法用 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 实现中的错误吗?

【问题讨论】:

    标签: angularjs ssl http2


    【解决方案1】:

    在 HTTP/2 下的连接可以在称为合并的过程下重复使用。

    这是为了在使用分片来提高 HTTP/1.1 连接的性能时也能获得 HTTP/2 的全部好处 - 这在 HTTP/2 下不再需要,实际上对性能不利(因为设置了额外的连接占用客户端和服务器上的资源)。

    这篇博文提供了有关 HTTP/2 连接合并以及不同浏览器如何以不同方式合并的更多详细信息:https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/

    但是,当您说它“发送到 A.domain”时,我感到很困惑。 连接应该被重用,但是网络服务器应该在适当的域下处理它。如果这没有发生,那么这听起来像是您正在使用的 Web 服务器上的 HTTP/2 实现中的一个错误。

    【讨论】:

    • 是的,我可以从 A.domain 看到默认页面,即使所有标题和导航栏都指示 B.domain。这是最可怕的部分。
    • 在检查器中,我可以看到一个标头“主机:B.domain”,但是,响应标头显然来自 A.domain。 Firefox 上有一个“编辑并重新发送”按钮,如果我使用它并再次发送相同的请求,则该页面由 B.domain 提供。如果我在 Firefox 中禁用 http/2,问题就会消失。
    • 我看过你提到的文章,很可能是我遇到的问题。感谢您分享您在这方面的知识,我正在验证您的答案:)
    • 这仍然没有意义。应该重用连接,但服务器仍应处理此问题并返回适当的内容。您使用的是哪个服务器,因为这听起来像是跨域泄漏信息的错误。
    • 我们使用默认的 openshift 路由器,所以它是 HAProxy
    猜你喜欢
    • 2017-09-09
    • 2018-09-15
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2012-04-05
    相关资源
    最近更新 更多