Ми можемо надійно відтворити такий сценарій:
- Створіть невелику HTML-сторінку, яка надсилає запити AJAX до сервера (за допомогою HTTP POST)
- Відключіться від мережі та підключіться знову
- Контролюйте пакети, які IE генерує після відмови
Після невдалого підключення до мережі IE робить наступний запит AJAX, але тільки надсилає HTTP-заголовок (а не тіло), коли виконує повідомлення HTTP. Це викликає всілякі проблеми на сервері, оскільки це лише частковий запит. Google вирішить цю проблему з Bing, і ви знайдете багато людей, які скаржаться на "випадкові помилки сервера", використовуючи AJAX або незрозумілі збої AJAX.
Ми знаємо, що IE (на відміну від більшості інших браузерів) завжди надсилає HTTP POST як два пакети TCP / IP. Заголовок і тіло надсилаються окремо. У випадку безпосередньо після відмови IE надсилає лише заголовок . IE ніколи не надсилає корисне навантаження, і сервер врешті-решт відповідає на час очікування.
Тож моє запитання - чому він поводиться так? Здається, неправильно на основі специфікації HTTP та інші веб-переглядачі не ведуть себе таким чином. Це просто помилка? Звичайно, це створює хаос у будь-яких серйозних веб-додатках на базі AJAX.
Довідкова інформація:
Існує аналогічна проблема, викликана тимчасовими таймаутами зберігання HTTP, які тривають менше 1 хвилини, і тут задокументовано: