Wir können das folgende Szenario zuverlässig neu erstellen:
- Erstellen Sie eine kleine HTML-Seite, die AJAX-Anforderungen an einen Server sendet (mithilfe von HTTP POST).
- Trennen Sie die Verbindung zum Netzwerk und stellen Sie die Verbindung wieder her
- Überwachen Sie die Pakete, die der IE nach dem Fehler generiert
Nach einer fehlgeschlagenen Netzwerkverbindung stellt der IE die nächste AJAX-Anforderung, sendet jedoch nur den HTTP-Header (nicht den Body), wenn der HTTP-Beitrag ausgeführt wird. Dies verursacht alle möglichen Probleme auf dem Server, da es sich nur um eine Teilanforderung handelt. Google dieses Problem mit Bing und Sie werden viele Leute finden, die sich über "zufällige Serverfehler" mit AJAX oder ungeklärte AJAX-Fehler beschweren.
Wir wissen, dass der IE (im Gegensatz zu den meisten anderen Browsern) einen HTTP-POST immer als ZWEI TCP / IP-Pakete sendet. Der Header und der Body werden separat gesendet. Im Fall direkt nach einem Fehler sendet der IE nur den Header . IE sendet niemals die Nutzdaten und der Server antwortet schließlich mit einem Timeout.
Meine Frage ist also - warum verhält es sich so? Aufgrund der HTTP-Spezifikation scheint dies falsch zu sein, und andere Browser verhalten sich nicht so. Ist es einfach ein Fehler? Dies führt sicherlich zu Chaos in jeder ernsthaften AJAX-basierten Webanwendung.
Referenzinformationen:
Es gibt ein ähnliches Problem, das durch HTTP-Keep-Alive-Timeouts ausgelöst wird, die kürzer als 1 Minute sind und hier dokumentiert sind: