使用 Nginx 1.10 和 HTTP/2 的 Firefox 中的第一个 Ajax 请求失败

Posted

技术标签:

【中文标题】使用 Nginx 1.10 和 HTTP/2 的 Firefox 中的第一个 Ajax 请求失败【英文标题】:First Ajax Request fails in Firefox with Nginx 1.10 and HTTP/2 【发布时间】:2016-09-20 09:29:00 【问题描述】:

自从我从 nginx 1.8 升级到 1.10 并激活 HTTP/2 而不是 SPDY 后,我在 Firefox 中触发的第一个 ajax 调用(通过 https)失败了。 如果我再次执行相同的调用,它会起作用。在 Chrome 和 IE 中不会出现此问题。停用 HTTP/2 可以解决问题,但对我来说不是永久的解决方案。

nginx 访问日志甚至没有列出第一个请求,所以我有点不知道从哪里开始调试。

Firefox Network Panel Wireshark Screenshot of first ajax call

火狐:46.0​​.1 Nginx:1.10 jQuery:2.22

【问题讨论】:

Firefox 中的 HTTP/2 和 CORS 存在一些奇怪的问题(但我没有在您的标头中看到预检请求,这让我有点困惑)。因此,我的建议是你尽你所能确保 CORS 不会咬你。 您使用哪种密码套件?我建议您使用Mozilla 建议的配置用于中级或现代。您可以使用Wireshark 进行故障排除。 我不认为 CORS 有问题,因为 ajax 调用针对的是同一个域。我尝试了不同的密码套件,包括 Mozilla 的密码套件,但均未成功。 还添加了第一个 ajax 调用的 wireshark 截图,遗憾的是我真的看不到那里的东西...... @r3vile 我对 FF 也有几乎相同的问题。但对我来说,这是页面重新加载后长时间不活动后的第一个请求。并且该请求未在 nginx 访问日志中注册。与 CORS 无关,因为我们都没有使用它。它既不是 SPDY 也不是 HTTP2 问题,因为我早在 nginx 1.10 之前就启用了它们并且它们工作正常。不幸的是,我没有更新之前的 nginx 配置文件来查找更改的内容,所以现在我有点卡住并尝试设置。 【参考方案1】:

这是一个仅影响版本 46 的 Firefox 错误。 https://bugzilla.mozilla.org/show_bug.cgi?id=1269055.

将 nginx 降级到 1.9.7(有人说甚至可以升级到 1.9.11)也有帮助

【讨论】:

【参考方案2】:

我已经检查过 IExplorer 10 和 11 - 同样的问题:罪魁祸首是 nginx v1.10。闲置一段时间后,发布请求未完成。

将 nginx 更新到至少 v1.11 以解决问题。

【讨论】:

以上是关于使用 Nginx 1.10 和 HTTP/2 的 Firefox 中的第一个 Ajax 请求失败的主要内容,如果未能解决你的问题,请参考以下文章

nginx版本升级到1.10

Nginx 1.10编译安装

ini Nginx 1.10 Drupal的配置文件

nginx 1.10 代理https 钉一钉

nginx 1.10 代理https 钉一钉

CentOS7 + Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 源码编译安装