我们能够可靠地重新创建以下情况:
网络连接失败后,IE将发出下一个AJAX请求,但在执行HTTP发布时仅发送 HTTP标头
(而不是正文)。由于这只是部分请求,因此会在服务器上引起各种问题。Google与Bing有关的这个问题,您会发现很多人抱怨使用AJAX或“无法解释的AJAX故障”导致的“服务器随机错误”。
我们知道IE(与大多数其他浏览器不同)总是将HTTP POST作为两个TCP / IP数据包发送。标头和正文分别发送。在发生故障后, IE仅 直接
发送header 。IE从不发送有效负载,服务器最终以超时响应。
所以我的问题是-
为什么它会这样表现?基于HTTP规范,这似乎是错误的,其他浏览器却没有这种行为。这仅仅是一个错误吗?当然,这会在任何基于AJAX的严重Web应用程序中造成严重破坏。
参考信息:
还有一个类似的问题,是由少于1分钟的HTTP保持活动超时触发的,记录在这里:
http://us.generation-nt.com/xmlhttprequest-post-sometimes-fails-when-server-
using-keep-aliv-help-188813541.html
http://support.microsoft.com/default.aspx?kbid=831167
这个问题似乎没有明确的答案,因此我将提供经验数据作为替代,并提供一些解决方法。也许某些MS内部人士有一天会对此有所了解…
如果在服务器上 禁用 了HTTP Keep-Alive ,则此问题将消失。换句话说,您的HTTP 1.1服务器将响应每个Ajax请求,Connection: Close
并在响应中添加一行。这使IE保持快乐,但会导致每个Ajax请求打开一个新连接。这可能会对性能产生重大影响,尤其是在高延迟网络上。
如果快速连续提出Ajax请求,则很容易触发该问题。例如,我们每100ms发出一次Ajax请求,然后网络状态发生变化,该错误很容易重现。尽管大多数应用程序可能不会发出此类请求,但您可能会接连发生几次服务器调用,这可能导致此问题。较少的聊天使IE保持快乐。
即使没有NTLM身份验证,它也会发生。
当服务器上的HTTP保持活动超时时间短于默认值(在Windows上默认为60秒)时,就会发生这种情况。相关链接中提供的详细信息。
Chrome或Firefox不会发生这种情况。FF发送一个数据包,因此似乎完全避免了这个问题。
它发生在IE 6、7、8中。无法在IE 9 beta中复制。
问题内容: 在我的Ajax代码中,我正在向go lang api发送一个关联数组,但是go lang不会接收任何数组。为什么? 为什么这个Ajax不会将数组发送到Go API?在下面的mvc结构中,我想要接收此数据: 问题答案: 您不能直接将数组从客户端发送到服务器,因为数组定义在两侧可能不相同。 有两种解决方法: 一个。您可以在clinet中将数组转换为json字符串,然后将其作为字符串参数发送
设置: 我有一个数据表,其每一行都是可点击的。单击行时,将进行 ajax 调用以返回一些数据。有时 ajax 调用需要一点时间,具体取决于返回的数据量。一切正常。 问题: 当快速单击行时,一个接一个地单击行时,会出现此问题。简而言之,在上一个 ajax 调用返回之前,如果单击该行(即进行新的 ajax 调用),我会得到一个错误。 (ajax调用返回一个JSONP数据) 看起来好像ajax调用混杂在
我正在尝试创建一个UDP服务器,它可以向所有向其发送消息的客户端发送消息。实际情况稍微复杂一点,但将其想象为聊天服务器是最简单的:以前发送过消息的每个人都会收到其他客户端发送的所有消息。 所有这些都是通过在单独的进程中完成的。(不过,所有网络连接都在同一个系统中,所以我认为UDP的不可靠性在这里不是问题。 服务器代码是这样一个循环(后面是完整的代码): 客户端代码也很简单——同样,这是稍微缩写的,
我正试图向本地托管在笔记本电脑上的服务器发送一个POST ajax请求,但我似乎无法获得任何信息。当我在我的站点(localhost)上单击一个按钮时,我可以看到服务器传回正确的信息,但在前端我得到了以下错误: 错误:网络错误:未能在XMLHttpRequest上执行发送:未能加载超文本传输协议://comp-ip。 它似乎每次都会触发一个错误,而不是“成功”。有人知道怎么回事吗? 编辑:我尝试过
问题内容: AJAX通话: 我收到以下错误:。但是,当我使用Postman时,我只需要添加带有url 的标头即可返回字符串。 请给我一些帮助,以解决问题。 我的目标是允许原始服务器以及正确提供的API密钥从Web Api取回数据。 问题答案: 在请求中添加标头会触发您的浏览器首先发送CORS预检OPTIONS请求。除了定义为CORS安全列出的请求标头的标头之外,添加到请求中的 任何 标头都将触发您
问题内容: 当我实现接口方法时,Eclipse将添加@Override批注。Eclipse似乎对此没有任何问题。而且,来自Cruise Control的自动化构建过程似乎对此没有问题。但是,当我从命令行构建并运行Javac的ant时,出现以下错误: Eclipse在Java 1.6下运行。Cruise Control正在运行Java 1.5。无论我使用哪个Java版本,我的蚂蚁构建都会失败。 问题