栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

jQuery Ajax发布参数有时不会在IE上发送

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jQuery Ajax发布参数有时不会在IE上发送

我花了最后一周在自己的应用程序中查找了类似的问题(使用Dojo,而不是JQuery)。从您的描述和出现的频率来看,我想说的是同样的问题。

当浏览器和服务器之间使用HTTP持久连接时(默认行为),服务器可以随时关闭HTTP连接。当浏览器在服务器关闭连接的同时开始发送新请求时,这会造成一个非常小的计时漏洞。大多数浏览器将使用其他连接或打开新连接并重新发送请求。这是RFC
2616第8.1.4节中建议的行为:


客户端,服务器或代理可以随时关闭传输连接。例如,客户端可能已开始在服务器决定关闭“空闲”连接的同时发送新请求。从服务器的角度来看,连接在空闲时正在关闭,但是从客户端的角度来看,请求正在进行中。

这意味着客户端,服务器和代理必须能够从异步关闭事件中恢复。客户端软件应该重新打开传输连接并重新发送中止的请求序列,而无需用户干预,只要请求序列是幂等的(参见第9.1.2节)。


Internet Explorer 确实会 尝试在发生这种情况时重新发送该请求, 但是 当它恰好是POST时,它将通过发送标头(带有Content-
Length)而不发送实际数据来处理它。这是格式错误的请求,应始终导致HTTP错误(通常是在超时之后等待永远不会出现的数据)。

此错误被Microsoft记录为KB
895954(请参阅http://support.microsoft.com/kb/895954)。Microsoft首先在IE
6中发现了此错误。他们提供了一个修复程序,并且此后似乎包括IE 9在内的每个版本的IE都附带了此修复程序。此修复程序有两个问题:

  1. 默认情况下未激活此修复程序。您必须使用regedit创建一个真正奇怪的密钥才能激活此修复程序:HKEY_LOCAL_MACHINE Software Microsoft Internet Explorer Main FeatureControl FEATURE_SKIP_POST_RETRY_ON_INTERNETWRITEFILE_KB895954。

  2. 该修复程序并不能真正解决问题。“固定”行为是,当尝试发送请求时关闭连接时,它甚至不尝试重新发送请求。它只是将错误传递给javascript应用程序。

看来您必须在代码中添加错误处理程序,如果请求失败,则可以自己重新发布请求。我正在为我的应用程序研究此解决方案。我担心的是,我不确定如何确定我收到的错误是由于发送查询的尝试失败还是由于查询导致的从服务器发送回的某些错误引起的(在这种情况下,我不会想重新发送)。

我编写了一个C程序来模拟Web服务器,并显式关闭连接以查看浏览器如何处理它。我发现IE可以100%地重现错误行为,而Firefox,Safari和Chrome可以通过100%的时间正确地在另一个连接上重新发送POST来恢复。答案可能是“不要使用IE”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号