Статус XmlHttpRequest 0 вместо 401 в IE 10 - программирование
Подтвердить что ты не робот

Статус XmlHttpRequest 0 вместо 401 в IE 10

Я столкнулся с этой проблемой. Я предполагаю, что это какая-то ошибка IE, но я хочу быть уверен.

Так что вопрос. Почему 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. Firefox и chrome правильно возвращают 401 в атрибуте состояния, но IE10 возвращает 0. Эта проблема нарушает методы обработки аутентификации, которые я использую для моего проекта.

Спасибо

Edit:

Я изменил плункер с обработчиками событий onload и onerror (подсказка от комментария monsur), но результат все тот же.

Я также убедился, что IE10 не имеет режима совместимости. (отзыв от комментария cernunnos)

4b9b3361

Ответ 1

Это похоже на ошибку в 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 Level 2 атрибут статуса должен быть равен нулю, если установлен флаг ошибки (например, из-за сетевой ошибки). Однако в спецификации также указывается (http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method), что сетевая ошибка

не включает HTTP-ответы, которые указывают на некоторый тип ошибки, такой как код статуса HTTP 410.

Я думаю, что ясно, что HTTP-статус 401 не должен поэтому рассматриваться как сетевая ошибка (как это не в Chrome, Firefox и Safari) и что это ошибка в IE10.

Ответ 2

Сегодня я столкнулся с этой проблемой. Попробовав несколько обходных решений и некоторые Googleing, я оказался здесь. Оказалось, что это просто настройки уровня безопасности. Независимо от того, в какой зоне безопасности находится ваш веб-сайт ( "Свойства обозревателя" > "Безопасность" ), убедитесь, что вы включили следующие параметры в своей зоне: Разное > Доступ к источникам данных по доменам.