HTTP/2 HTTP_TRANSACTION_READ_HEADERS 长时间超时
HTTP/2 long timouts at HTTP_TRANSACTION_READ_HEADERS
问题:
我最近一直在为大型 PHP+JS 应用程序启用 HTTP/2(通常是 Backbone-based 由 PHP back-end 服务的 SPA ).虽然大多数资源加载正常,但有两个请求卡在 "Stalled" 状态整整 5 分钟,然后才正常解析和下载。
有问题的两个请求是对我们 back-end 的简单 XMLHttpRequest 和对 Font Awesome 字体文件的请求。其他字体文件和 back-end 请求加载得很好,但是当启用 HTTP/2 时,这两个文件会一直挂起。
调试信息:
以下是 headers 与 Chrome 的开发工具中列出的字体文件请求相关联的文件:
...这里是 chrome://net-internals 的输出,挂断发生在 HTTP_TRANSACTION_READ_HEADERS(查看将近 30000 毫秒的 dt):
更多详情:
此应用程序使用 a build of apache2 that includes the mod_http2 module 而不是使用 Ubuntu 打包的标准版 apache2 提供服务。最新版本的 Firefox Chrome 和 Ubuntu 16.04 上的 Chrome beta 报告了相同的行为。
为了本地开发,所有 SSL 运行 通过 self-signed OpenSSL 证书,使用 OpenSSL 版本 1.0.2j 生成。
还应该注意,所有其他成功的请求都是通过 运行ning 通过 Backbone-related 方法,这些方法委托给 jQuery 的 $.ajax,其中失败的 XMLHttpRequest 正在使用本机 JS XMLHttpRequest Object.
感谢您的帮助。
您使用的是什么版本的 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 的错误。
问题:
我最近一直在为大型 PHP+JS 应用程序启用 HTTP/2(通常是 Backbone-based 由 PHP back-end 服务的 SPA ).虽然大多数资源加载正常,但有两个请求卡在 "Stalled" 状态整整 5 分钟,然后才正常解析和下载。
有问题的两个请求是对我们 back-end 的简单 XMLHttpRequest 和对 Font Awesome 字体文件的请求。其他字体文件和 back-end 请求加载得很好,但是当启用 HTTP/2 时,这两个文件会一直挂起。
调试信息:
以下是 headers 与 Chrome 的开发工具中列出的字体文件请求相关联的文件:
...这里是 chrome://net-internals 的输出,挂断发生在 HTTP_TRANSACTION_READ_HEADERS(查看将近 30000 毫秒的 dt):
更多详情:
此应用程序使用 a build of apache2 that includes the mod_http2 module 而不是使用 Ubuntu 打包的标准版 apache2 提供服务。最新版本的 Firefox Chrome 和 Ubuntu 16.04 上的 Chrome beta 报告了相同的行为。
为了本地开发,所有 SSL 运行 通过 self-signed OpenSSL 证书,使用 OpenSSL 版本 1.0.2j 生成。
还应该注意,所有其他成功的请求都是通过 运行ning 通过 Backbone-related 方法,这些方法委托给 jQuery 的 $.ajax,其中失败的 XMLHttpRequest 正在使用本机 JS XMLHttpRequest Object.
感谢您的帮助。
您使用的是什么版本的 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 的错误。