【问题标题】:HTTP/2 long timouts at HTTP_TRANSACTION_READ_HEADERSHTTP_TRANSACTION_READ_HEADERS 处的 HTTP/2 长时间超时
【发布时间】:2017-05-05 23:57:22
【问题描述】:

问题:

我最近一直致力于为大型 PHP+JS 应用程序启用 HTTP/2(通常是由 PHP 后端提供的基于 Backbone 的 SPA)。虽然大多数资源加载正常,但有两个请求在正常解析和下载之前卡在“停滞”状态整整 5 分钟。

有问题的两个请求是对我们后端的简单 XMLHttpRequest 和对 Font Awesome 字体文件的请求。其他字体文件和后端请求都加载得很好,但是当启用 HTTP/2 时,这两个会一直挂掉。

调试信息:

以下是与 Chrome 开发工具中列出的字体文件请求相关的标头:

...这是来自 chrome://net-internals 的输出,挂断发生在 HTTP_TRANSACTION_READ_HEADERS(参见近 30000 毫秒的 dt):

更多细节:

此应用程序使用a build of apache2 that includes the mod_http2 module 提供服务,而不是使用 Ubuntu 打包的标准版本的 apache2。在 Ubuntu 16.04 上的最新版本的 Firefox、Chrome 和 Chrome beta 中报告了相同的行为。

为了本地开发,所有 SSL 都通过自签名 OpenSSL 证书运行,该证书使用 OpenSSL 版本 1.0.2j 生成。

还应该注意的是,所有其他成功的请求都是通过与 Backbone 相关的方法运行的,这些方法委托给 jQuery 的 $.ajax,其中失败的 XMLHttpRequest 使用的是本机 JS XMLHttpRequest 对象。

感谢您的帮助。

【问题讨论】:

    标签: apache http http2


    【解决方案1】:

    您使用的是什么版本的 Apache 和 mod_http2?

    已经有大量针对此类问题的修复,包括这些修复在内的 Apache 2.4.25 即将发布,因此建议您在下一两天发布时升级到该版本,然后重试。

    或者,如果您不想等待,您可以尝试通过执行以下操作独立更新 mod_http2(假设 Apache 安装在 /usr/local/apache2/ 中,但请酌情调整):

    #Download and install mod_http2 outside of a regular Apache release
    #Latest version is here: https://github.com/icing/mod_h2/releases/
    wget https://github.com/icing/mod_h2/releases/download/v1.8.3/mod_http2-1.8.3.tar.gz
    tar -zxvf mod_http2-1.8.3.tar.gz
    cd mod_http2-1.8.3
    ./configure --with-apxs=/usr/local/apache2/bin/apxs
    make
    sudo make install
    

    然后重新启动 Apache 并从错误日志中确认您正在运行 mod_http2-1.8.3。

    如果这不起作用,请在此处提出问题:https://github.com/icing/mod_h2/,因为 mod_http2 开发人员 (@icing) 对问题非常敏感。当然,假设这是一个 Apache 错误。

    【讨论】:

    • 根据PPA I'm using,apache2的版本是2.4.23。看起来下一步是尝试升级 http2 模块...
    • 对于未来的 google-ers:这个问题没有通过升级 apache 2.4.23 中的 mod_http2 模块解决,但问题通过升级到 2.4.25 解决。再次感谢 @BazzaDP 对 apache 更新的提醒。
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多