2013-04-18 47 views
16

我遇到了這個問題。我想這是一些IE錯誤,但我想確定。IE 10中XmlHttpRequest狀態0而不是401

所以問題是。爲什麼IE10 XmlHttpRequest.status返回0而不是401?

var xmlhttp=new XMLHttpRequest(); 

xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4) 
    { 
     document.getElementById("rescode").innerHTML="Request completed with status: "+xmlhttp.status; 
    } 
    } 
xmlhttp.open("GET","http://hosting.gregy.cz/cors/",true); 
xmlhttp.send(); 

看到這裏plunker:http://plnkr.co/edit/E2lCflPDHHaQi7t79IeM?p=preview

此代碼觸發一個CORS請求,它總是返回401火狐和Chrome的狀態屬性正確地返回401,但IE10返回0。我用這個問題中斷認證處理方法我的項目。

謝謝

編輯:

我已經修改了與的onload和onerror事件處理程序(從monsur的評論TIP)的plunker,但結果還是一樣。

我也確定IE10沒有選擇兼容模式。 (來自cernunnos評論的提示)

+2

@rekire:CORS是規避SOP的一種方法。這不是重複的。 – Matt

+0

IE10支持CORS,而你的服務器響應似乎有必要的頭文件,你確定你沒有在兼容模式下運行IE10嗎?也許IE9/8/7瀏覽器模式/文檔模式? – cernunnos

+1

嘗試附加到更新的'onload'和'onerror'方法,並查看您在每個方法中獲得的狀態。 – monsur

回答

19

這似乎是IE10中的一個錯誤(https://connect.microsoft.com/IE/feedback/details/785990/ie-10-on-win8-does-not-assign-the-correct-status-to-xmlhttprequest-when-the-result-is-401)。

IE10將HTTP狀態401視爲網絡錯誤。控制檯顯示:

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied 

按照XMLHttpRequest的級別2規範status屬性應該是零,如果錯誤標誌被設置(例如,由於網絡錯誤)。然而,規範還規定(http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method),一個網絡錯誤

不包括HTTP的答覆表明,某些類型的錯誤,例如 如HTTP狀態碼410

我認爲,很明顯,因此,不應將HTTP狀態401視爲網絡錯誤(因爲它不在Chrome,Firefox和Safari中),並且這是IE10中的一個錯誤。

+0

有沒有什麼辦法來檢測它們產生的錯誤呢? – streetlight

+1

另外,我遇​​到了同樣的問題,但用'undefined'取回'404' - 這讓我發瘋了! – streetlight

+0

這個錯誤似乎在IE11中。 –

3

我今天剛碰到這個問題。在嘗試了幾個解決方法和一些Googleing之後,我最終在這裏。原來只是一個安全級別的設置。 無論您的網站位於哪個安全區域(Int​​ernet選項>安全性),請確保您在您的區域中啓用以下設置:其他>訪問跨域的數據源。

+0

謝謝,這有幫助。這也是微軟錯誤報告接受答案鏈接中提到的解決方法。 – stackErr