HTTP_TRANSACTION_READ_HEADERS上的HTTP / 2长时间超时

时间:2016-12-20 17:18:14

标签: apache http http2

问题:

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

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

调试信息:

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

response headers

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

net-internals

进一步详情:

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本的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 bug。