Я провел последнюю неделю, отслеживая аналогичную проблему в своем собственном приложении (использует Dojo, а не JQuery). Исходя из вашего описания и частоты появления, я бы сказал, что это та же проблема.
Когда постоянные соединения HTTP используются между браузером и сервером (поведение по умолчанию), соединение HTTP может быть закрыто сервером в любое время. Это создает очень маленькую временную дыру, когда браузер начинает отправлять новый запрос в то же время, когда сервер закрывает соединение. Большинство браузеров используют другое соединение или открывают новое соединение и повторно отправляют запрос. Такое поведение предлагается в разделе 8.1.4 RFC 2616:
Клиент, сервер или прокси МОЖЕТ закрыть транспортное соединение в любом
время. Например, клиент мог начать отправлять новый запрос
в то же время, что сервер решил закрыть «простоя»
подключение. С точки зрения сервера, соединение
закрыт, пока он простаивал, но с точки зрения клиента,
запрос в процессе.
Это означает, что клиенты, серверы и прокси ДОЛЖНЫ быть в состоянии восстановить
из асинхронных событий закрытия. Клиентское программное обеспечение ДОЛЖНО открыть
транспортное соединение и ретранслировать прерванную последовательность запросов
без взаимодействия с пользователем, пока последовательность запроса
идемпотент (см. раздел 9.1.2).
Internet Explorer пытается повторно отправить запрос, когда это происходит, , но , когда это происходит в режиме POST, он обрабатывает его, отправляя заголовки (с Content-Length) но нет фактических данных. Это некорректный запрос, который всегда должен приводить к ошибке HTTP (обычно после некоторого времени ожидания данных, которые никогда не поступают).
Эта ошибка задокументирована Microsoft как KB 895954 (см. http://support.microsoft.com/kb/895954). Microsoft впервые распознала эту ошибку в IE 6. Они предоставили исправление и, похоже, с тех пор поставляли исправление для каждой версии IE, включая IE 9. Есть две проблемы с исправлением:
Исправление не активировано по умолчанию. Вам нужно создать действительно странный ключ, используя regedit для активации исправления: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_SKIP_POST_RETRY_ON_INTERNETWRITEFILE_KB895954.
Исправление не решает проблему. «Фиксированное» поведение заключается в том, что когда соединение закрывается при попытке отправить запрос, оно даже не пытается отправить его повторно. Он просто передает ошибку в приложение javascript.
Похоже, что вы должны добавить обработчики ошибок в свой код и повторно опубликовать запрос самостоятельно, если он потерпит неудачу. Я ищу это решение для моего приложения. Меня беспокоит то, что я не уверен, как определить, вызвана ли полученная ошибка неудачной попыткой отправить запрос или какой-то ошибкой, отправленной с сервера в результате запроса (в этом случае я не хочу отправить его).
Я написал C-программу для имитации веб-сервера и явного закрытия соединения, чтобы посмотреть, как браузер его обрабатывает. Я обнаружил, что IE воспроизводит ошибочное поведение 100% времени, в то время как Firefox, Safari и Chrome восстанавливаются путем правильной повторной отправки POST по другому соединению 100% времени. Возможно, ответ таков: «Не используйте IE».