【问题标题】:Chrome redirects and makes 2 requests of the same page (307 Internal Redirect), how to prevent?Chrome重定向并发出同一页面的2个请求(307内部重定向),如何防止?
【发布时间】:2022-08-23 20:50:59
【问题描述】:

我们有一个php页面,加载可能需要一些时间,响应时间可能超过30秒,它的脚本很重,很正常,不对外开放。 此页面每次执行时都会在我们的数据库中保存一个日志,我注意到,当页面加载速度快时,日志会保存一次,但如果响应时间较长,则日志会保存两次。

奇怪的是,这只是在 Chrome 中发生,在 Firefox 上打开页面时,即使加载时间很长,日志也会保存一次。这让我推断,当响应时间很长时,Chrome 会执行两次页面。

在 Chrome 中检查网络后,我发现实际上 Chrome 正在加载页面两次:

第一次被取消,然后重定向(307)并最终加载。 (在他的情况下,加载需要超过一分钟,但这是正常的)

重定向不是 307 临时重定向,而是 307内部重定向.经过一番挖掘,事实证明 Chrome 实际上有一个执行此重定向的扩展程序(请参阅@Rob W. 307 Redirect when loading analytics.js in Chrome 的分析器)

问题是:

  • 为什么 Chrome 会做 307内部重定向(确实两次调用服务器)
  • 我怎样才能从服务器端阻止它? (我不想从 Chrome 修改配置,因为我不能要求所有用户更改他们的配置)

谢谢!

    标签: php google-chrome http-status-code-307


    【解决方案1】:
    1. 307 internal redirect 不是真正的重定向。这是由 Chrome 完成的虚假内部重定向,实际上并没有发送到服务器。 Chrome 在看到 HSTS 非权威标头时会执行此操作,因此它会创建一个带有 307 internal redirect 的虚假请求,然后发送一个真实的使用在第一个假 internal redirect 请求的位置标头中找到的升级后的 https URL 向后端/服务器请求。这是一项安全功能 (http strict transport security),允许站点选择浏览器从 http 升级到 https。你可以在这里查看@Barry 的答案https://stackoverflow.com/a/34213531/14876907

    2. 在启用它的 Web 服务器中找到配置。它将类似于Strict-Transport-Security 作为标头发送到浏览器,因此找到它的设置位置然后将其删除。另外,请记住从 Chrome 的缓存中删除网站本身,这样 Chrome 就不会自动升级到 https。它也可以在预加载到浏览器本身的域本身上设置(例如,任何带有.dev.app 的域名都将升级为使用https;在这种情况下,没有什么可真的要完成。在这里检查预加载的域https://hstspreload.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 2014-10-09
      • 2012-07-28
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多