【发布时间】: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 对象。
感谢您的帮助。
【问题讨论】: