Internet Explorer: SCRIPT7002: XMLHttpRequest: ошибка сети 0x2f7d, не удалось завершить операцию из-за ошибки 00002f7d - программирование

Internet Explorer: SCRIPT7002: XMLHttpRequest: ошибка сети 0x2f7d, не удалось завершить операцию из-за ошибки 00002f7d

Эта проблема сводит меня с ума. В нашем веб-приложении используется HTTP POST для входа в систему, и теперь IE 10 прерывает соединение и говорит:

SCRIPT7002: XMLHttpRequest: Network Error 0x2f7d, Could not complete the operation due to error 00002f7d.

Вот все подробности, которые у меня есть

  • IE версия 10.0.9.16618, версия обновления 10.0.6. Я также воспроизвел это в IE версии 10.0.9200.16635, обновил версию 10.0.7.
  • В домене используется HTTPS. Проблема не возникает при HTTP-соединениях.
  • Я читал, что по какой-то причине IE должен получить сертификат, прежде чем он сможет выполнить HTTP POST, поэтому у меня есть HTTP GET, выполняющийся до моего запроса POST, но теперь GET выдает ошибку. См. Снимок экрана сетевого потока. GET супер просто, просто страница PING, которая возвращает "Я вверх".
  • Asyn отключен $.ajax({type: 'POST', url: url, async: false...}); Я читал в других сообщениях, что это имеет значение.
  • Сертификат хороший, см. снимок экрана.
  • Проблема исчезает, если сайт добавляется как "надежный сайт", но это не тот опыт, который мы снимаем для пользователей.
  • Это только началось около месяца назад. Недавно Microsoft выпустила несколько новых обновлений?
  • Я уже читал: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/dd5d2762-7643-420e-880a-9bf75554e383/intermittent-xmlhttprequest-network-error-0x2f7d-could-not-complete-the-operation-due-to-error. Это не помогает.

Снимки экрана:

Сетевой поток: enter image description here

Сертификат хорош:

enter image description here

Любая помощь приветствуется. Я потратил много часов на это, не повезло. Как и следовало ожидать, это прекрасно работает в Chrome и Firefox. Если вам нужна дополнительная информация о том, что происходит, пожалуйста, дайте мне знать.

Спасибо,

4b9b3361

Ответ 1

Проверка отзыва сертификатов может блокировать начальный JSON POST, но разрешать последующие запросы после обратного вызова GET

Недавно мы определили, что код URLMon (Win8, Win7 и, возможно, ранее) для игнорирования сбоев проверки отзыва не применяется для загрузки контента (например, HTTP POST). Следовательно, если проверка отзыва сертификата терпит неудачу, это является фатальной для загрузки (например, IE покажет сообщение об ошибке "Невозможно отобразить страницу", другие клиенты будут показывать другую ошибку). Однако это редко имеет значение в реальном мире, потому что в большинстве случаев пользователь сначала выполняет загрузку (HTTP GET) с целевого сайта HTTPS, и в результате сертификат сервера кэшируется с ошибкой "игнорировать проверку отзыва" время жизни процесса и, следовательно, последующий POST наследует этот флаг и преуспевает. Загрузка не выполняется, если самый первый запрос на сайт HTTPS в текущем процессе был для загрузки (например, как в запросе POST с перекрестным происхождением).

Вот как это работает:

Небольшой фон: когда веб-браузер инициирует рукопожатие HTTPS с помощью веб-сервера, сервер немедленно отправляет цифровой сертификат. Имя хоста сервера указано внутри цифрового сертификата, и браузер сравнивает его с именем хоста, которое он пытался достичь. Если эти имена хостов не совпадают, браузер вызывает ошибку.

Требование соответствия-hostnames вызывает проблему, если один IP-адрес настроен на размещение нескольких сайтов (иногда называемых "виртуальным хостингом" ). Обычно сервер виртуального хостинга проверяет заголовок запроса хоста HTTP для определения возвращаемого HTTP-содержимого. Однако в случае HTTPS сервер должен предоставить цифровой сертификат, прежде чем он получит заголовки HTTP из браузера. SNI решает эту проблему, перечисляя имя хоста целевых серверов в поле расширения SNI исходного рукопожатия клиента с защищенным сервером. Сервер виртуального хостинга может исследовать расширение SNI, чтобы определить, какой цифровой сертификат отправить обратно клиенту.

GET может быть жертвой сценария operation aborted:

Файл HTML обрабатывается и встречает блок script. Блок script содержит встроенный script, который создает новый элемент и пытается добавить его в элемент BODY, прежде чем тег BODY будет обнаружен парсером.

<body>
  <div>
    <script>document.body.appendChild(newElem)</script>
  </div>
</body>

Обратите внимание, что если я удалил элемент <div>, эта проблема не возникла бы, потому что исходный родительский блок script был бы BODY, а немедленный родительский блок script невосприимчив к этой проблеме.

Ссылки

Ответ 2

[решено]

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

SCRIPT7002: XMLHttpRequest: ошибка сети 0x2efd, не удалось завершить операция из-за ошибки 00002efd.

Я происходил случайно и не все время. но он заметил, что если это произойдет, это произойдет для последующих вызовов ajax.. поэтому я поставлю задержку на 5 секунд между вызовами ajax и разрешил.

Также на веб-сервере должен быть настроен CORS.

Ответ 3

У меня была такая же точная проблема, и я, наконец, ее разрешил. По какой-то причине я получил ту же ошибку, которую вы получали в IE при подключении к API с использованием промежуточного программного обеспечения OWIN, которое использовалось для получения учетных данных. Казалось, что он отлично работает при подключении к любому другому API. По какой-то причине ему не понравился запрос на перекрестный домен, хотя у меня была поддержка сервера CORS на API.

В любом случае мне удалось решить проблему, используя библиотеку xdomain. Обязательно загрузите этот script перед загрузкой любого другого javascript.

Сначала создайте страницу proxy.html в корне вашего сервера API и добавьте этот код. Замените URL-адрес заполнителя.

<!DOCTYPE HTML>
<script src="//cdn.rawgit.com/jpillora/xdomain/0.7.3/dist/xdomain.min.js" master="http://insert_client_url_here.com"></script>

Теперь просто добавьте это для своего клиента, заменив URL-адрес заполнителя, указывающий на страницу proxy.html на вашем сервере API.

<script src="//cdn.rawgit.com/jpillora/xdomain/0.7.3/dist/xdomain.min.js" slave="http://Insert_Api_Url_Here.com/proxy.html"></script>