使用IE11 +访问的CORS使用SSL拒绝访问localhost

Gre*_*tit 11 javascript ajax ssl internet-explorer cors

非常短版本:是否有人通过AJAX在IE中通过SSL成功请求本地资源?我无法解决获得"拒绝访问"错误的问题.


更长的版本:

我正在使用AJAX从运行本地Web服务的应用程序中检索JSON.Web服务通道已加密,因此,如果通过HTTPS提供远程站点,则不会出现"安全页面上的不安全资源"错误.

所以,在地址栏中是一个某种类型的远程站点...... mysite.com.它正在接收来自的信息https://localhost/.

Web服务正在为CORS设置正确的标头,一切都可以在Chrome和Firefox中使用.在IE中,如果我将https://localhost资源放入地址栏,则会返回并显示正确的资源.但是,当使用AJAX(不仅仅是地址栏)时,IE中的安全设置拒绝访问.这在此处记录(部分):

当ajax目标是localhost时,IE 10和11中的访问被拒绝

一个回复中唯一合适的解决方案是将请求域(在本例中为mysite.com)添加到受信任的站点.这有效,但我们宁愿没有用户干预......指向如何添加可信站点的知识库文章几乎不是一个很好的用户体验.对于该问题的其他回复是无效的,原因如下 - >

一些更绊脚石,我发现了这个:

CORS与IE,XMLHttpRequest和ssl(https)

其中包含一个回复,其中包含IE中AJAX请求的包装器.它似乎很有希望,但事实证明,IE11现在已经弃用了XDomainRequest API.对于微软而言,这可能是正确的做法......但是现在向XDR对象添加void onProgress处理程序的"黑客"解决方法显然不是一种选择,而且曾经很有前途的解决方案包装器被渲染为无效.

有没有人遇到过:

a)一种获取这些请求而无需修改IE中可信站点的方法?换句话说,第二个链接中的变通方法的更新版本?

b)作为"次佳"案例:提示用户将站点添加到其受信任区域的方法?"mysite.com希望被添加到您的受信任区域.确认是/否"并完成它,没有他们实际需要打开他们的本机设置对话并手动完成它?

Eri*_*Law 7

出于安全原因,Internet Explorer的XDomainRequest对象阻止从Internet区域访问Intranet区域(请参阅此处的#6).我不会惊讶地发现这个块被移植到XMLHTTPRequest对象的IE10 + CORS实现中.

可能有帮助的一种方法是简单地改变localhost,127.0.0.1因为后者被视为Internet Zone而不是Intranet Zone因此避免了区域交叉.

但是,您应该知道,当站点在增强保护模式(EPM)下运行时,Internet Explorer 10+将阻止对本地计算机的所有访问(通过任何地址) - 请参阅此帖子中的 "Loopback blocked" .目前,IE在Metro/Immersive浏览模式(不在桌面模式下)运行时仅对Internet站点使用EPM,但这可能在将来发生变化.

不,没有机制可以从JavaScript显示区域配置UI或自动将站点从一个区域移动到另一个区域.但是,您拥有本地服务器这一事实意味着您已在客户端上运行代码,这意味着您可以使用适当的API更新客户端上的区域映射.请注意,此类更改要求您首先明确获取用户权限,以免Windows Defender和其他安全产品将您的安装程序视为恶意软件.

因此,总之,使用IP地址应该作为许多但不是所有平台的解决方法.