【问题标题】:XMLHttpRequest: Network Error 0x80070005, Access is denied on Microsoft Edge (but not IE)XMLHttpRequest:网络错误 0x80070005,在 Microsoft Edge(但不是 IE)上拒绝访问
【发布时间】:2015-09-03 00:08:14
【问题描述】:

我有一个非常简单的 ajax 请求(见下文)。服务器正在使用 CORS,并且在 IE 10+、Chrome、Firefox 和 Opera 中运行良好。但是,在 Microsoft Edge 上,它会失败并显示

XMLHttpRequest:网络错误 0x80070005,访问被拒绝。

我研究了herehereherehere 的帖子,但找不到有效的答案。那些人在使用 IE 时遇到了问题,但是添加 contentType(此获取不需要)和 crossDomain 可以正常工作。

CanIUse 似乎声明 CORS 在 Edge 中可用。该请求在 IE9 关闭时也会失败,但 CanIUse 仅声明对 CORS 的部分支持,所以这是可以理解的。

请问有什么办法可以解决这个问题吗?

代码:

$.ajax({
      crossDomain: true,
      url: "http://localhost:2023/api/DoAction/test",
      success: function (a) {
        var res = JSON.parse(a);
        alert(res.content);
      },
      error: function (a, e, r) {
        alert(a.responseText);
      }
    });

更新

添加更多信息以防提供任何线索 - ajax 请求来自 Azure,并发布到使用 OWIN 自托管创建的 localhost 网站。这是不寻常的,但软件(只能在本地使用)从云服务获取数据是必需的。如前所述,它适用于所有其他浏览器,Edge 是唯一的问题。

【问题讨论】:

  • 请求来自的页面的 URL 方案是什么?
  • 为什么要在 GET 请求中设置 content-type 标头?没有描述内容的请求正文。
  • 你为什么要使用dataType: "json" 将响应显式解析为 JSON?这将尝试双重解析它,这在大多数情况下都会中断。
  • 根据更新更新了示例 - 除了边缘之外,仍然适用。
  • 您找到解决方案了吗?我遇到了同样的问题。

标签: javascript ajax internet-explorer cors microsoft-edge


【解决方案1】:

对于使用 Microsoft Edge 的开发人员来说,这个问题应该不再存在。如果您在 localhost 测试中遇到问题,请导航到 about:flags,并确保选中 Allow localhost loopback


Microsoft Edge当前不支持(开箱即用)本地主机测试。但是,您可以按照此处提供的指导启用它:http://dev.modern.ie/platform/faq/how-can-i-debug-localhost/

我们正在努力在未来的版本中解决此问题。

【讨论】:

  • 一直工作到包含 Build 10162,在 Build 10166 中中断。从本地主机向启用 CORS 的远程主机发出的 AJAX 请求失败,并显示“网络错误 0x80070005”
  • 我会进一步调查!
  • 在 Build 10240 中再次工作 :)
  • 我安装了 SSL 证书(真实的,不是自签名的),并在 hosts 文件中添加了一个条目以将域指向 localhost。如果页面上的第一个 AJAX 调用是 POST,则会在 Microsoft Edge(生产版本)中产生网络错误。如果第一个调用是 GET,则一切正常,包括后续的 POST。如果您清除浏览器缓存或重新启动 IIS,则会再次出现此问题。
  • Edge 似乎不仅在本地主机上而且在 iframe 上也存在 CORS 问题 :( 使用 Edge 浏览器查看此链接:reportingapidotnetsample.realeyes.me/Charting
【解决方案2】:

对于 Build 10158,命令略有变化,将 Spartan 重新命名为 Microsoft Edge,因此要在 Microsoft Edge 中启用它,请从管理员命令提示符运行以下命令:

CheckNetIsolation.exe LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

【讨论】:

    【解决方案3】:

    在你的 ajax 调用之前使用这个:$.support.cors = true;

    【讨论】:

    • 这会覆盖 jQuery 对浏览器对 CORS 支持的检测。这要么没有效果,要么会破坏事情。不要那样做。
    猜你喜欢
    • 2018-03-11
    • 2015-10-17
    • 1970-01-01
    • 2018-04-05
    • 2017-08-11
    • 2019-09-12
    • 2018-11-22
    • 2018-09-07
    • 2015-01-31
    相关资源
    最近更新 更多