2013-04-18 3 views
16

私はこの問題で壁に当たった。私はIEのバグのようなものだと思うが、私は確信したい。IE10で401の代わりにXmlHttpRequestステータス0

質問があります。なぜIE10のXmlHttpRequest.statusは401の代わりに0を返しますか?

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

このコードは常に401 Firefoxとクロームが正しくステータス属性に401を返す返しますが、IE10は、私が使用するメソッドを取り扱う0この問題ブレイク認証を返すCORS要求を発射私のプロジェクト。

はありがとう

編集:私はオンロードとは、onerrorイベントハンドラ(monsurさんのコメントから先端)との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の仕様によれば。しかし、仕様では、私はそれがあることは明らかであると考え、このような

410 HTTPステータスコードとして

、ネットワークエラー

は、エラーのいくつかのタイプを示すHTTPレスポンスを含んでいないこと(http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method)を述べてしたがって、HTTPステータス401はネットワークエラー(Chrome、Firefox、Safariにはないため)として扱われるべきではなく、これはIE10のバグです。

+0

代わりに生成しているこのエラーを検出する方法はありますか? – streetlight

+1

さらに、同じ問題が発生していますが、「未定義」の「404」が戻ってきています。 – streetlight

+0

このバグはIE11にあるようです。 –

3

今日、この問題が発生しました。いくつかの回避策やいくつかのGoogleingを試した後、私はここで終わりました。 セキュリティレベルの設定になっていることが判明しました。 Webサイトのセキュリティゾーン(インターネットオプション>セキュリティ)にかかわらず、ゾーン内の次の設定を有効にしてください。その他>ドメイン間のデータソースにアクセスします。

+0

ありがとう、これが助けになりました。これはまた、Microsoftのバグレポートへの受け入れられた回答のリンクに記載されている回避策です。 – stackErr

関連する問題