#事故現場
在前端發送一個跨域請求的時候,要先發送個options請求,從而獲知服務端是否允許該跨域請求。
跨域資源共享標准新增了一組 HTTP 首部字段,允許服務器聲明哪些源站有權限訪問哪些資源。另外,規范要求,對那些可能對服務器數據產生副作用的 HTTP 請求方法(特別是 GET 以外的 HTTP 請求,或者搭配某些 MIME 類型的 POST 請求),瀏覽器必須首先使用 OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。服務器確認允許之后,才發起實際的 HTTP 請求。在預檢請求的返回中,服務器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關數據)。
在實際的代碼調試時,發現chrome的network中看不到OPTIONS請求,但是用wireshark抓包是可以看到OPTIONS請求,又檢查了下chrome,也沒有設置Filter,這就奇怪了!!!
#分析及解決方法
- 分析
換用其他瀏覽器調試,可以看到OPTIONS請求,說明是chrome的設置問題; - 解決方法
在chrome地址欄總輸入chrome://flags/#out-of-blink-cors
將其設置為Disabled
,並重啟chrome即可;
#參考
- https://stackoverflow.com/questions/57410051/chrome-not-showing-options-requests-in-network-tab
- https://bugs.chromium.org/p/chromium/issues/detail?id=995740#c1
- https://support.google.com/chrome/thread/11089651?hl=en