为什么 Internet Explorer 在失败后不发送 HTTP post body on Ajax 调用?
我们能够可靠地重现以下场景:
- 创建一个小的 HTML 页面,该页面向服务器发出 AJAX 请求(使用 HTTP POST)
- 断开网络连接并重新连接
- 监视 IE 在发生故障后生成的数据包
网络连接失败后,IE 会发出下一个 AJAX 请求,但在执行 HTTP 发布时仅发送 HTTP 标头(而不是正文)。这会导致服务器上出现各种问题,因为它只是部分请求。谷歌这个问题与Bing,你会发现很多人抱怨使用AJAX的“随机服务器错误”或无法解释的AJAX故障。
我们知道IE(与大多数其他浏览器不同)总是将HTTP POST作为两个TCP / IP数据包发送。标头和正文是单独发送的。在失败后直接的情况下,IE 仅发送标头。IE 从不发送有效负载,服务器最终会以超时进行响应。
所以我的问题是 - 为什么它以这种方式表现?基于HTTP规范似乎是错误的,其他浏览器不以这种方式运行。它只是一个错误吗?当然,这会在任何基于AJAX的Web应用程序中造成严重破坏。
参考信息:
还有一个类似的问题,由短于 1 分钟的 HTTP 保持活动超时触发,记录如下: