Nous sommes en mesure fiable de recréer le scénario suivant:
- Créer une petite page HTML qui fait une requête AJAX vers un serveur (à l'aide de HTTP POST)
- Débranchez-le du réseau et de le reconnecter
- Surveiller les paquets que IE génère, après l'échec
Après un échec de connexion réseau, c'est à dire, la prochaine requête AJAX, mais seulement envoie l' en-tête HTTP (pas le corps) lors de la post HTTP. Cela provoque toutes sortes de problèmes sur le serveur en tant qu'il est seulement une partie de la demande. Google cette question avec Bing et vous trouverez beaucoup de gens se plaignent "aléatoire des erreurs de serveur" à l'aide d'AJAX ou inexpliquée AJAX échecs.
Nous savons que IE (contrairement à la plupart des autres navigateurs) envoie toujours un HTTP POST comme DEUX paquets TCP/IP. L'en-tête et le corps est envoyé séparément. Dans le cas directement après un échec, c'est à dire uniquement envoie l'en-tête.
Donc ma question est, pourquoi faut-il se comporter de cette façon? Il semble erroné basé sur la spécification HTTP et les autres navigateurs ne se comportent pas de cette façon. Est-ce simplement un bug? Certes, cela crée des ravages dans toute graves AJAX basé sur le Web application.
Des informations de référence.
Il y a un problème similaire, déclenchée par HTTP keep-alive délais d'attente qui sont plus courtes que 1 minute et est documenté ici:
http://support.microsoft.com/default.aspx?kbid=831167
Voici l'avant et l'après l'échec des captures de paquets:
Remarquez comment l'en-Tête HTTP et de la Charge utile est envoyé http://img827.imageshack.us/i/beforee.png/
Après un échec, notez que l'en-Tête est envoyé. IE ne jamais envoie la charge utile et le serveur finalement répond avec un Délai d'attente. http://img203.imageshack.us/i/retryt.png/