我最近一直在为大型PHP + JS应用程序(通常是由PHP后端提供的基于Backbone的SPA)启用HTTP / 2。虽然大多数资源都可以正常运行,但在正常解析和下载之前,有两个请求会在“停顿”状态下停留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版本1.0.2j生成的自签名OpenSSL证书运行。
还应该注意,所有其他成功的请求都是通过Backbone相关的方法运行的,这些方法委托给jQuery的$ .ajax,其中失败的XMLHttpRequest使用本机JS XMLHttpRequest对象。
感谢您的帮助。
答案 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。