Siamo in grado di ricreare in modo affidabile il seguente scenario:
- Crea una piccola pagina HTML che invia richieste AJAX a un server (utilizzando HTTP POST)
- Disconnettiti dalla rete e ricollegati
- Monitorare i pacchetti generati da IE dopo l'errore
Dopo una connessione di rete fallita, IE effettua la successiva richiesta AJAX ma invia solo l' intestazione HTTP (non il corpo) quando esegue il post HTTP. Ciò causa tutti i tipi di problemi sul server poiché è solo una richiesta parziale. Cerca questo problema con Bing su Google e troverai molte persone che si lamentano di "errori casuali del server" utilizzando AJAX o errori AJAX inspiegabili.
Sappiamo che IE (a differenza della maggior parte degli altri browser) invia sempre un HTTP POST come DUE pacchetti TCP / IP. L'intestazione e il corpo vengono inviati separatamente. Nel caso subito dopo un errore, IE invia solo l'intestazione . IE non invia mai il payload e il server alla fine risponde con un timeout.
Quindi la mia domanda è: perché si comporta in questo modo? Sembra sbagliato in base alle specifiche HTTP e altri browser non si comportano in questo modo. È semplicemente un bug? Sicuramente questo crea scompiglio in qualsiasi applicazione Web basata su AJAX seria.
Informazioni di riferimento:
Esiste un problema simile, attivato da timeout keep-alive HTTP inferiori a 1 minuto ed è documentato qui: