1. 程式人生 > >安全錯誤使用CORS在IE10與Node和Express及XMLHttpRequest: 網路錯誤 0x4c7, 操作已被使用者取消

安全錯誤使用CORS在IE10與Node和Express及XMLHttpRequest: 網路錯誤 0x4c7, 操作已被使用者取消

在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);