Мы можем надежно воссоздать следующий сценарий:
- Создать небольшую HTML-страницу, которая отправляет запросы AJAX на сервер (используя HTTP POST)
- Отключение от сети иПереподключение
- Отслеживание пакетов, которые IE генерирует после сбоя
После сбоя сетевого подключения IE делает следующий запрос AJAX, но отправляет только HTTP-заголовок (не тело) при выполнении поста HTTP.Это вызывает все виды проблем на сервере, так как это только частичный запрос.Обсудите эту проблему с Bing, и вы найдете множество людей, жалующихся на «случайные ошибки сервера» при использовании AJAX или необъяснимые сбои AJAX.
Мы знаем, что IE (в отличие от большинства других браузеров) всегда отправляет HTTP POST в виде ДВУХ пакетов TCP / IP.Заголовок и тело отправляются отдельно.В случае сразу после сбоя IE отправляет только заголовок .
Так что мой вопрос - почему он так себя ведет?Это кажется неправильным, основываясь на спецификации HTTP, и другие браузеры не ведут себя таким образом.Это просто ошибка?Конечно, это создает хаос в любом серьезном веб-приложении на основе AJAX.
Справочная информация:
Существует аналогичная проблема, вызванная тайм-аутами активности активности HTTP, которые короче, чем1 минута и задокументировано здесь:
http://us.generation -nt.com / xmlhttprequest-post-иногда-сбои-когда-сервер-keep-aliv-help-188813541.html
http://support.microsoft.com/default.aspx?kbid=831167
Вот перехват пакетов до и после сбоя:
Обратите внимание, как отправляются заголовок и полезная нагрузка HTTP http://img827.imageshack.us/i/beforee.png/
Послеошибка, обратите внимание, как отправляется только заголовок.IE никогда не отправляет полезную нагрузку, и сервер в конечном итоге отвечает Таймаутом.http://img203.imageshack.us/i/retryt.png/