XMLHttpRequest: Двойной TCP SYN в течение миллисекунды в Internet Explorer 9
Объект XMLHttpRequest вызывает два пакета TCP SYN, когда я пытаюсь отправить некоторые данные POST. Это происходит менее чем за миллисекунду. Я не могу воспроизвести это поведение в любом другом браузере (протестировано с последними версиями браузера Firefox и Google Chrome).
Даже флаг "асинхронный" или тайм-аут не влияют на ситуацию.
Проблема в том, что когда IE9 отправляет два SYN, они автоматически подтверждаются стеком TCP/IP сервера. Но, к сожалению, IE9 затем отправляет данные Post во второй поток, что означает, что веб-сервер уже ожидает байты в первом сокете (вызывает тайм-аут). Это происходит потому, что мы говорим об однопоточном веб-сервере, который может одновременно обрабатывать один сокет.
Есть предложения или идеи?
Я хотел бы запретить IE9 устанавливать два сокета одновременно.
Это происходит независимо от того, использую ли я jjery-функцию ajax или реализую ее самостоятельно в java-скрипте.
С уважением
Матиас
2 ответа
Просто идея, вы можете попробовать добавить Connection: close
заголовок во всех ответах сервера, чтобы убедиться, что браузер запускает новое TCP-соединение для каждого запроса.
Мы замечаем то же самое через 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