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也会成功。
您的请求缺少以下属性,添加哪些属性可以解决问题。
- 请求方法:
GET
,POST
等 - 请求内容类型(标题):
application/json
等 - 请求数据类型(标题):
json
,XML
等。
另请查看以下代码段:
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");