我正在尝试用JavaScript从HTTP GET
内部向rest API发出iframe
请求。iframe被沙盒化,但是它设置了allow-scripts
属性,并且我正在调用的API已启用以允许所有来源,因此CORS应该不会成为问题。
我已经在这里用最少的代码示例重新创建了方案:http://plnkr.co/edit/jrchvxFXQQDqs2Fv
如果您转到该页面并使用任何现代浏览器(Chrome,Edge等)预览页面,它将正常工作。
但是如果您使用Internet Explorer 11
执行此操作,则呼叫将失败。在javascript控制台上,我们收到此通用网络错误:
但是奇怪的是:该呼叫实际上正在正确运行。实际上,如果我们检查“网络”标签,就可以看到它正在执行并重新设置200:
我在这里做错什么了吗,或者这只是普通的IE就是IE?
我发现我们需要添加allow-same-origin
才能使其在IE中运行。
默认情况下,sandbox
对iframe强制实施“不同来源”策略。换句话说,它使浏览器将iframe视为来自其他来源,即使其src指向同一站点也是如此。 allow-same-origin
删除此功能。因此,我认为它一开始在IE中失败,因为它不符合same-origin policy。
关于IE和其他浏览器之间的差异,我认为这是由于不同浏览器中的策略设计不同所致。
我也找到有关此问题的a thread,并且有一些有用的信息,您也可以参考它以获取更多信息。