XMLHttpRequest: двойное TCP SYN в течение миллисекунды в Internet Explorer 9 - PullRequest
3 голосов
/ 01 июня 2011

объект XMLHttpRequest вызывает два пакета TCP SYN, когда я пытаюсь отправить некоторые данные POST. Это происходит менее чем за миллисекунду. Я не могу воспроизвести это поведение в любом другом браузере (протестировано с последними версиями браузера Firefox и Google Chrome).

Даже флаг «асинхронный» или настройка тайм-аута, похоже, не меняют ситуацию.

Проблема в том, что когда IE9 отправляет два SYN, они автоматически подтверждаются стеком TCP / IP сервера. Но, к сожалению, IE9 затем отправляет данные Post во второй поток, что означает, что веб-сервер уже ожидает байты в первом сокете (вызывает тайм-аут). Это происходит потому, что мы говорим об однопоточном веб-сервере, который может одновременно обрабатывать один сокет.

Есть предложения или идеи?

Я бы хотел запретить IE9 устанавливать два сокета одновременно.

Это происходит независимо от того, использую ли я jjery-функцию ajax или реализую ее самостоятельно в сценарии java.

С наилучшими пожеланиями

Matthias

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Мы замечаем то же самое через wireshark, собственный отладчик F12 в IE9 показывает один POST, но пакеты, приходящие с клиентской машины IE9, показывают два POSTS ... и сервер также получает 2, что вызывает противоречивые проблемы для нашего приложение на стороне сервера.

Версия 9.0.8112.16421, обновление версии 9.0.3 (2586448 КБ)

Нам пришлось включить заголовок совместимости IE8, чтобы остановить двойные сообщения

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Это очень странно ... не происходит со всеми нашими формами, почти как JS-компилятор приходит к определенным выводам о том, как выполнять код в разных контекстах.

Полезно знать о закрытии заголовка на стороне клиента ... это может быть лучше для нас в долгосрочной перспективе ... надеюсь, это будет решено в IE9

1 голос
/ 02 июня 2011

Просто идея, вы можете попробовать добавить заголовок Connection: close во все ответы сервера, чтобы убедиться, что браузер запускает новое tcp-соединение для каждого запроса.

...