我正在使用jQuery发送交叉源ajax请求,并且它们在IE11,Chrome和Firefox中运行良好但是它们在Edge中失败并出现以下错误:
SCRIPT7002:XMLHttpRequest:网络错误0x80070005,访问权限是 拒绝。
有趣的是,我使用Fiddler试图弄清楚发生了什么,当Fiddler正在运行并捕获请求时,一切正常。一旦我关闭Fiddler或暂停捕获它就会再次失败。
该站点在我的本地计算机(webpack-dev-server)上运行,通过本地网络向WebAPI服务发出请求。
我的主机文件设置如下:
127.0.0.1 local.myapp.test
192.168.0.111 api.myapp.test
它不应该是生产中的问题,因为站点和API将托管在同一个地方,但它对于开发和测试非常宝贵。
更新
感谢Eric Law,我现在知道为什么它在Fiddler启用时表现不同 - 由于Fiddler所做的代理设置更改以及Intranet区域的安全级别较低,Edge正在切换到本地Intranet区域。
我要将本地Intranet区域安全级别提升到中高,以匹配Internet区域,然后使用Fiddler尝试解决为什么Edge对CORS请求感到不安。
答案 0 :(得分:2)
我将在下面逐字地列出Eric Lawrence(Fiddler的创造者)在Fiddler论坛上提供的答案:
一种可能性是您的计算机配置了Intranet区域,并且Intranet区域依赖于代理配置脚本:http://blogs.msdn.com/b/ieinternals/archive/2012/06/05/the-local-intranet-security-zone.aspx。当Fiddler运行时,代理设置指向Fiddler本身。
...如果您正在使用Intranet网站作为来自Internet区域中的网站的XHR目标,那么还有另一个因素在起作用。
Edge以增强保护模式(AppContainer)运行。它具有阻止从Internet区域进程访问专用网络资源的功能。请参阅"专用网络资源" http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx部分了解更多详情。
我将local.myapp.test(运行我的SPA的URL)添加到Internet选项中的本地Intranet区域,现在Edge很高兴,而不需要Fiddler。
答案 1 :(得分:2)
我遇到了这个问题,在尝试了几个选项后,对我有用的是从所有Zone站点条目中删除我正在使用的域。以local.myapp.test为例,我检查了所有“anysubdomain”.myapp.test,条目并将其从所有区域中删除,包括所有子域名或外卡条目。
在“Internet选项”(IE 11)中,选择安全标签,然后在“本地Intranet ”中点击“网站”,然后选择“高级“并删除了相关的域名引用。
在“受信任的网站”中点击“网站”,然后从列表中删除相关条目
答案 2 :(得分:1)
在about中:Edge内部的标志确保"允许localhost环回(这可能会使您的设备处于危险之中)"检查。
答案 3 :(得分:1)
我最近遇到了这个“问题”,解决方案是转到 edge://flags/
(只需在搜索栏中输入)。之后,搜索 CORS
,很快您就会看到 Block insecure private network requests
标志。您只需选择 disable
即可。