安全錯誤使用CORS在IE10與Node和Express及XMLHttpRequest: 網路錯誤 0x4c7, 操作已被使用者取消
阿新 • • 發佈:2018-12-07
在IE下:VUE專案,後臺替換為https請求之後,vue熱更新請求掛起,控制檯報錯:XMLHttpRequest: 網路錯誤 0x4c7, 操作已被使用者取消。但是chrome與Firefox正常
當從IE10發起請求時,請求從未命中API伺服器。據我所知,該請求甚至不被髮送。當我使用IE10的開發人員工具檢查請求時,請求標頭和響應標頭都為空。當從任何其他瀏覽器傳送請求時,會收到請求並正確生成響應。
原因:
CORS在IE中預設禁用,必須啟用:
Explorer忽略Access-Control-Allow標頭,預設情況下 禁止Internet區域的跨源訪問。要啟用CORS,請轉到 工具 - > Internet選項 - >安全選項卡,單擊“自定義級別”按鈕。 查詢其他 - >訪問跨域的資料來源,設定 並選擇“啟用”選項(注:不需要重啟,重新整理生效)
請求返回正常
當我啟用此設定,請求通過,一切工作,因為它應該。但是,我已經讀過這個設定實際上與CORS無關,並且不應該影響它。使用此工具測試CORS相容性時,無論此設定是啟用還是禁用,這讓我相信CORS 是啟用的,我只是做錯了。
此外,一切似乎都工作,因為它應該當我執行 Fiddler 時,因為Fiddler充當代理。
為了參考,這裡是伺服器端的CORS相關程式碼:
res.header(“Access- -Origin“,”example.com“); res.header(“Access-Control-Allow-Methods”,“GET,PUT,POST,DELETE,OPTIONS”); res.header(“Access解決方案-Control-Allow-Headers”,“Content-Type,Authorization,X-File-Name,X-File-Size,X-File-Type”); res.header(“Access-Control-Allow-Credentials”,true); if(req.method ==“OPTIONS”){ res.send(200); }
API伺服器使用HTTP而不是HTTPS。該問題聽起來像可能與伺服器的SSL設定相比,更多的要求本身。如果是這種情況,請嘗試使用SSL設定來執行此操作。
var options = { key:fs.readFileSync(key), cert:fs.readFileSync(certificate), ca:fs.readFileSync(CA), requestCert:false, }; https.createServer(options,app).listen(443);