[英]Chrome redirects and makes 2 requests of the same page (307 Internal Redirect), how to prevent?
我們在php有一個頁面,加載可能需要一些時間,響應時間可能超過30秒,腳本很重,正常,不對外開放。 該頁面每次執行時都會在我們的數據庫中保存一個日志,我注意到,當頁面加載速度快時,日志會保存一次,但如果響應時間較長,則日志會保存兩次。
奇怪的是,這只是發生在Chrome中,在Firefox上打開頁面時,即使加載時間很長,日志也只保存了一次。 這讓我推斷,當響應時間很長時,Chrome 會執行兩次頁面。
在 Chrome 中檢查網絡后,我發現實際上 Chrome 正在加載頁面兩次:
第一次被取消,然后重定向(307)並最終加載。 (在他的情況下,加載需要超過一分鍾,但這是正常的)
重定向不是 307 Temporary Redirect 而是 307 Internal Redirect 。 經過一番挖掘,事實證明 Chrome 實際上有一個擴展程序可以執行這種重定向(請參閱@Rob W. 307 Redirect when loading analytics.js in Chrome的分析器)
問題是:
謝謝!
307 internal redirect
不是真正的重定向。 這是由 Chrome 完成的虛假內部重定向,實際上並沒有發送到服務器。 Chrome does it when it sees the HSTS
non-authoritative header on and so it creates a fake request with a 307 internal redirect
and then send a real request to the backend/server using the upgraded https
URL found in the location header in the first fake internal redirect
請求。 這是一項安全功能( http strict transport security
),允許站點選擇瀏覽器從http
升級到https
。 您可以在此處查看@Barry 的答案https://stackoverflow.com/a/34213531/14876907
在啟用它的 web 服務器中找到配置。 它將類似於Strict-Transport-Security
as header 發送到瀏覽器,因此找到它的設置位置然后將其刪除。 另外,請記住從 Chrome 的緩存中刪除網站本身,這樣 Chrome 就不會自動升級到https
。 它也可以設置在預加載到瀏覽器本身的域本身上(例如,任何帶有.dev
或.app
的域名都將升級為使用https
;在這種情況下,真的沒有什么可做的。在此處檢查預加載的域https://hstspreload.org/ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.