13

这个问题快把我逼疯了。我们的网络应用程序使用 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 非常简单,只是一个返回“I'm up”的 PING 页面。
  • 异步关闭 $.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-由于错误而完成操作。它没有帮助。

屏幕截图:

网络流量: 在此处输入图像描述

证书很好:

在此处输入图像描述

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

谢谢,

4

4 回答 4

4

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

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

下面是它的工作原理:

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

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

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

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

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

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

参考

于 2015-05-21T01:26:45.977 回答
1

[解决了]

我今天才观察到这个错误。对我来说,错误代码是不同的。

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

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

此外,必须在您的 Web 服务器上配置CORS 。

于 2016-11-29T09:06:42.777 回答
0

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

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

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

<!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 页面的占位符 URL。

<script src="//cdn.rawgit.com/jpillora/xdomain/0.7.3/dist/xdomain.min.js" slave="http://Insert_Api_Url_Here.com/proxy.html"></script>
于 2015-07-20T18:43:53.813 回答
0

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

于 2018-04-03T09:41:08.193 回答