Мы можем достоверно воссоздать следующий сценарий:
- Создайте небольшую HTML-страницу, которая делает запросы AJAX к серверу (используя HTTP POST)
- Отключитесь от сети и снова подключитесь
- Отслеживайте пакеты, которые IE генерирует после сбоя
После сбоя сетевого подключения IE выполняет следующий запрос AJAX, но при отправке HTTP-сообщения отправляет только заголовок HTTP (а не тело). Это вызывает всевозможные проблемы на сервере, поскольку это только частичный запрос. Погуглите эту проблему с Bing, и вы найдете множество людей, жалующихся на «случайные ошибки сервера» с использованием AJAX или необъяснимые сбои AJAX.
Мы знаем, что IE (в отличие от большинства других браузеров) всегда отправляет HTTP POST в виде ДВУХ пакетов TCP / IP. Заголовок и тело отправляются отдельно. В случае, если сразу после сбоя IE отправляет только заголовок . IE никогда не отправляет полезную нагрузку, и сервер в конечном итоге отвечает тайм-аутом.
Итак, у меня вопрос - почему он так себя ведет? Это кажется неправильным, исходя из спецификации HTTP, и другие браузеры так себя не ведут. Это просто ошибка? Несомненно, это разрушит любое серьезное веб-приложение на основе AJAX.
Справочная информация:
Существует аналогичная проблема, вызванная тайм-аутом HTTP keep-alive, который короче 1 минуты, и документирована здесь: