響應碼異常HttpStatus not ok!statusCode:307


問題復現

  1. 先訪問https://a.com, 該網頁JS會請求https://api.a.com接口
  2. 再訪問http://a.com, 該網頁JS會請求http://api.a.com,但是查看網絡請求發現,http://api.a.com被強制307到了https://api.a.com

經過排查發現,這是命中了瀏覽器的HSTS策略,即:

一切能通過https訪問的網址,都用https來訪問

「能通過https訪問的網址」怎么定義呢?那就是你曾經訪問過該網址的https鏈接。

  • (當然可以通過清除瀏覽器歷史記錄來騙過瀏覽器,但你的用戶可能不知道這個操作)

問題解決

  • server端重定向用戶訪問的http鏈接到https
  • 如果必須允許用戶訪問http鏈接,則服務端接口針對80端口請求做跨域支持,因為跨端口也是跨域

307從何而來,是個什么東西呢

經過使用chrome://net-internals/追蹤發現,是瀏覽器自己返回的:

URL_REQUEST_REDIRECT_JOB
    --> reason = "HSTS" t=24613 [st= 2] URL_REQUEST_FAKE_RESPONSE_HEADERS_CREATED --> HTTP/1.1 307 Internal Redirect Location: https://api.a.com Non-Authoritative-Reason: HSTS Access-Control-Allow-Origin: http://api.a.com Access-Control-Allow-Credentials: true


【參考的文章鏈接】 https://xwenliang.cn/p/5be6e275469f887b71000001


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM