【问题标题】:Internet Explorer: SCRIPT7002: XMLHttpRequest: Network Error 0x2f7d, Could not complete the operation due to error 00002f7dInternet Explorer:SCRIPT7002:XMLHttpRequest:网络错误 0x2f7d,由于错误 00002f7d 无法完成操作
【发布时间】:2013-07-14 23:10:24
【问题描述】:

这个问题快把我逼疯了。我们的网络应用程序使用 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 页面。
  • 异步关闭 $.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。没用。

屏幕截图:

网络流量:

证书很好:

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

谢谢,

【问题讨论】:

  • 您找到解决方案了吗?
  • 不。还是没弄明白。
  • 你有什么进展吗?
  • 我能够解决这个问题。请参阅下面我的回复。

标签: xmlhttprequest internet-explorer-10


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    [已解决]

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

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

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

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

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我终于解决了。出于某种原因,当使用用于接收登录凭据的 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 页面的占位符 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>
      

      【讨论】:

        【解决方案4】:

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

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

        这是它的工作原理:

        一点背景知识:当网络浏览器发起与网络服务器的 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>
        

        请注意,如果我删除了 &lt;div&gt; 元素,则不会发生此问题,因为脚本块的直接父级将是 BODY,并且脚本块的直接父级不会出现此问题。

        参考文献

        【讨论】:

          猜你喜欢
          • 2019-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-07
          • 2023-03-06
          • 2014-09-26
          • 1970-01-01
          • 2017-03-15
          相关资源
          最近更新 更多