Internet Explorer:SCRIPT7002:XMLHttpRequest:网络错误0x2f7d,由于错误00002f7d无法完成操作

时间:2013-07-16 16:33:24

标签: xmlhttprequest internet-explorer-10

这个问题让我疯了。我们的网络应用程序使用HTTP POST登录用户,现在IE 10正在中止连接并说:

SCRIPT7002: XMLHttpRequest: Network Error 0x2f7d, Could not complete the operation due to error 00002f7d.

以下是我的所有细节

  • IE版本10.0.9.16618,更新版本10.0.6。我也在IE版本10.0.9200.16635,更新版本10.0.7上再现了这个。
  • 该域名正在使用HTTPS。 HTTP连接上不会出现此问题
  • 我已经读过因某些原因IE需要获得证书才能进行HTTP POST,所以我在POST请求之前运行了HTTP GET,但现在GET出错了。请参阅网络流屏幕截图。 GET非常简单,只是一个PING页面,返回“我起来。”
  • Asyn关闭$ .ajax({type:'POST',url:url,async:false ...});我在其他帖子中读到这很重要。
  • 证书很好,请看屏幕截图。
  • 如果网站被添加为“受信任的网站”,但这不是我们正在拍摄的用户体验,问题就会消失。
  • 这只是一个月前开始的。微软最近是否推出了一些新的更新?
  • 我已经读过:http://social.msdn.microsoft.com/Forums/windowsapps/en-US/dd5d2762-7643-420e-880a-9bf75554e383/intermittent-xmlhttprequest-network-error-0x2f7d-could-not-complete-the-operation-due-to-error。它没有帮助。

截屏:

网络流量: enter image description here

证书很好:

enter image description here

非常感谢任何帮助。我花了很多时间没有运气。正如您所料,这在Chrome和Firefox中运行良好。如果您需要更多有关正在发生的事情的详细信息,请告诉我们。

谢谢,

4 个答案:

答案 0 :(得分:4)

证书吊销检查可能会阻止初始JSON POST,但允许在GET回调之后的后续请求

  

我们最近确定,忽略证书吊销检查失败的URLMon代码(Win8,Win7,可能更早)不适用于内容上传(例如HTTP POST)。因此,如果证书吊销检查失败,则对上载是致命的(例如,IE将显示“无法显示页面”错误消息;其他客户端将显示不同的错误)。但是,这在现实世界中很少发生,因为在大多数情况下,用户首先从目标HTTPS站点执行下载(HTTP GET),因此服务器的证书将缓存为"忽略撤销检查失败"对进程的生命周期进行豁免,因此后续的POST继承该标志并成功。如果当前进程中对HTTPS站点的第一个请求是用于上载(例如,在跨源POST请求中),则上载失败。

以下是它的工作原理:

  

一点背景:当Web浏览器启动与Web服务器的HTTPS握手时,服务器会立即发送数字证书。服务器的主机名列在数字证书中,浏览器将其与其尝试访问的主机名进行比较。如果这些主机名不匹配,浏览器会引发错误。

     

如果将单个IP配置为托管多个站点(有时称为“虚拟主机”),则匹配主机名要求会导致问题。通常,虚拟主机服务器检查HTTP主机请求标头以确定要返回的HTTP内容。但是,在HTTPS情况下,服务器必须在从浏览器接收HTTP标头之前提供数字证书。 SNI通过在与安全服务器的初始客户端握手的SNI扩展字段中列出目标服务器的主机名来解决此问题。虚拟主机服务器可以检查SNI扩展以确定将哪个数字证书发送回客户端。

GET可能是operation aborted场景的受害者:

  

正在解析HTML文件,并遇到脚本块。脚本块包含内联脚本,该脚本创建新元素并尝试在解析器遇到关闭BODY标记之前将其添加到BODY元素。

<body>
  <div>
    <script>document.body.appendChild(newElem)</script>
  </div>
</body>
  

请注意,如果我删除了<div>元素,则不会发生此问题,因为脚本块的直接父级将是BODY,并且脚本块的直接父级对此免疫问题

<强>参考

答案 1 :(得分:1)

<强> [解决]

我今天才发现这个错误。对我来说,错误代码虽然不同。

  

SCRIPT7002:XMLHttpRequest:网络错误0x2efd,无法完成   由于错误00002efd的操作。

我随机发生,而不是所有时间。但它注意到的是,如果它出现后续的ajax调用..所以我 在ajax调用之间放置了5秒的延迟 并解决了。

还必须在您的网络服务器上配置 CORS

答案 2 :(得分:0)

我有同样的问题,我终于解决了。出于某种原因,当使用用于接收登录凭据的OWIN中间件连接到API时,我得到了与您在IE上收到的相同的错误。虽然它连接到任何其他类型的API似乎工作正常。出于某种原因,即使我在API上启用了CORS服务器端,它也不喜欢跨域请求。

无论如何,我能够使用xdomain库来解决问题。确保在加载任何其他javascript之前加载此脚本。

首先在API服务器的根目录上创建一个proxy.html页面并添加此代码。替换占位符网址。

<!DOCTYPE HTML>
<script src="//cdn.rawgit.com/jpillora/xdomain/0.7.3/dist/xdomain.min.js" master="http://insert_client_url_here.com"></script>

现在只需将此添加到您的客户端,替换指向API服务器上的proxy.html页面的占位符网址。

<script src="//cdn.rawgit.com/jpillora/xdomain/0.7.3/dist/xdomain.min.js" slave="http://Insert_Api_Url_Here.com/proxy.html"></script>

答案 3 :(得分:0)

添加延迟不是一个合适的解决方案。 这可能是因为IE会在发出空体请求时将其视为网络错误。 尝试在服务器中添加一个空类作为参数,IE应该开始工作。