Windows 10上的Edge 32位阻止对网络错误0x2efd的localhost的ajax调用

我们有一个应用程序使用SignalR与本地的扫描仪驱动程序交谈,这些驱动程序已经在IE,Chrome和Firefox上生产了几年,这对于SignalR的hubs js头文件没有问题。 一旦Edge问世,我们看到了与localhost交谈的问题,经过长时间努力寻找允许它进行通信的设置(以及他们没有发现任何解决方案的微软票证的许多小时),我们决定添加标题以允许Edge授予访问域名:

Access-Control-Allow-Origin: https://localhost:11000

这似乎有效,但我们没有注意到它适用于64位Windows 10 Edge,但没有在32位Windows 10 Edge上运行。 我花了几个小时降低所有区域的所有安全设置并禁用保护模式,尝试使用不同的ajax技巧来拉取文件,但继续得到错误:

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

以下伪代码失败:

 $.ajax({ url: "https://localhost:11000/signalr/hubs", crossDomain: true, success: function (data) { console.log("success"); }, error: function (jqXHR, textStatus, errorThrown) { console.log("error:"); console.log(jqXHR); } }); 

我正在寻找任何有关设置或其他任何尝试的见解,或者是否有其他人已经看到此问题。 另外一条信息,fiddler没有显示任何流量的呼叫,所以它似乎被浏览器阻止。 同样在与Edge-IE失败的同一台计算机上,Chrome和FF也会成功。

您的请求缺少以下属性,添加哪些属性可以解决问题。

  1. 请求方法: GETPOST
  2. 请求内容类型(标题): application/json
  3. 请求数据类型(标题): jsonXML等。

另请查看以下代码段:

 type:"POST", contentType:"application/json; charset=utf-8", dataType:"json" 

通过进入开发工具并从顶部下拉列表中选择,在IE兼容模式下尝试它,如果错误仍然发生,可能是IE使用的一些Windows系统文件。 此调用是否使用证书进行身份validation? 也许证书已过期或Edge使用不同的身份validation方法? 检查IE中的源选项卡(兼容和不兼容)以查看是否正在加载资源,因为Fiddler仅捕获HTTP和HTTPS流量。 这应该指出你在错误等方面的正确方向。最后,也许只是编写一个C#应用程序,向同一个URL发出请求,新版本的.NET可能使用相同的依赖关系,可能会破坏你的呼叫。 如果是这样,C#将为您提供足够的描述性错误来解决问题

我遇到过同样的问题。 虽然Ajax对同一域上的页面的调用在其他所有浏览器中都有效,但在Edge中却没有。 在另一个选项卡中打开用于Ajax调用的URL将得到正确的结果。 将这段代码添加到为Ajax调用提供服务的页面中以某种方式修复了它……代码在C#中,但是这可能会让我们知道如何在其他语言中修复它。

  if (Request.UserHostName == "127.0.0.1") Response.AppendHeader("Access-Control-Allow-Origin", "*"); 

你可以试试这个。

  $.ajax({ url:url, type:"POST", data:data, contentType:"application/json; charset=utf-8", dataType:"json", success: function(){ // } }); 

并确保正确提供参数,内容类型,数据类型,responseCode..etc

我和Edge有类似的问题。 修复需要在ajax调用和在localhost上运行的服务器中进行更改。

在ajax调用中,我不得不从旧的text / plain更改为application / json

 contentType: 'application/json; charset=utf-8', 

本地服务器正在使用Jersey,因此我在其中添加了ContainerResponseFilter实现,该实现添加了Access-Control-Allow-Headers和Access-Control-Allow-Methods标头。 Access-Control-Allow-Origin已经到位。

 res.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization"); res.getHeaders().add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");