2013-04-18 13 views
16

Ho colpito un muro con questo problema. Immagino sia una specie di bug di IE, ma voglio esserne sicuro.XmlHttpRequest stato 0 anziché 401 in IE 10

Quindi la domanda è. Perché IE10 XmlHttpRequest.status restituisce 0 invece di 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(); 

See plunker qui: http://plnkr.co/edit/E2lCflPDHHaQi7t79IeM?p=preview

Questo codice spara una richiesta CORS che restituisce sempre 401. Firefox e Chrome tornare correttamente in 401 attributo status ma IE10 ritorna 0. Questa modalità di gestione di autenticazione emissione pause che uso per il mio progetto.

Grazie

Edit:

Ho modificato il plunker con onload e gestori di eventi OnError (punta dal commento di Monsur), ma il risultato è sempre lo stesso.

Mi sono anche assicurato che IE10 non abbia selezionato la modalità di compatibilità. (suggerimento del commento di cernunnos)

+2

@rekire: CORS è un modo per aggirare il SOP. Questo non è un duplicato. – Matt

+0

IE10 supporta in modo sistematico CORS e la risposta del server sembra avere le intestazioni necessarie, sei sicuro di non eseguire il tuo IE10 in modalità compatibilità? forse IE9/8/7 Modalità browser/Modalità documento? – cernunnos

+1

Prova ad eseguire il collegamento ai più recenti metodi 'onload' e' onerror' e vedi cosa ottieni in ciascuno di essi. – monsur

risposta

19

Questo sembra essere un bug in 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 sta trattando lo stato HTTP 401 come errore di rete. La console mostra:

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

Secondo la specifica XMLHttpRequest Livello 2 l'attributo status dovrebbe essere zero se il flag di errore viene impostato (per esempio a causa di un errore di rete). Tuttavia la specifica afferma anche (http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method) che un errore di rete

non include risposte HTTP che indicano un certo tipo di errore, come ad esempio codice di stato HTTP 410.

penso che sia chiaro che Lo stato HTTP 401 non dovrebbe quindi essere trattato come un errore di rete (poiché non è in Chrome, Firefox e Safari) e questo è un bug in IE10.

+0

C'è un modo per rilevare questo errore che stanno generando invece? – streetlight

+1

Inoltre, sto riscontrando lo stesso problema ma ottenendo un '404' con un back 'indefinito' - mi sta facendo impazzire! – streetlight

+0

Questo bug sembra essere presente in IE11. –

3

Ho appena incontrato questo problema oggi. Dopo aver provato alcuni rimedi alternativi e alcuni Googleing, sono finito qui. Si è rivelato essere solo un livello di sicurezza. Qualsiasi zona di sicurezza del tuo sito web sia attiva (Opzioni Internet> Sicurezza) assicurati di ATTIVARE la seguente impostazione nella tua zona: Varie> Accedi alle origini dati tra domini.

+0

Grazie, questo ha aiutato. Questa è anche la soluzione menzionata nel link alle risposte accettate al bug report di Microsofts. – stackErr