Internet Explorer 11 不在 CORS 请求中添加 Origin 标头?
Posted
技术标签:
【中文标题】Internet Explorer 11 不在 CORS 请求中添加 Origin 标头?【英文标题】:Internet Explorer 11 does not add the Origin header on a CORS request? 【发布时间】:2014-01-14 01:44:34 【问题描述】:我的问题取决于我持有的几个假设。
假设 nr 1:源头
浏览器需要将Origin
标头放在CORS(跨源资源共享)请求中。
Wikipedia:
为了发起一个跨域请求,浏览器发送请求 一个 Origin HTTP 标头。
html5 Rocks:
首先要注意的是,一个有效的 CORS 请求总是包含 一个 Origin 标头。这个 Origin 头是浏览器添加的,可以 不受用户控制。
W3:
如果请求 URL 来源与原始 URL 不同来源 来源,将来源来源设置为全局唯一标识符 [..]。
假设 nr 2:Internet Explorer 10+ 支持 CORS
请参阅 caniuse.com 并使用谷歌搜索数百个声称支持的不同来源。
假设 nr 3:不同的端口是不同的来源
使用不同端口号的资源被认为具有不同的来源:
Wikipedia
当且仅当两个资源被认为是同源的 所有这些值都完全相同。 [..] 失败 - 相同的协议 和主机但不同的端口。
Mozilla Developer Network
如果协议、端口(如果一个是 指定),并且主机对于两个页面都是相同的。
问题:
在向同一个域“localhost”但使用不同端口(从 8411 到 8080)发出 CORS 请求时,Internet Explorer 11 不会发送 Origin
标头。 Opera、FireFox 和 Chrome 确实会发送 Origin 标头。然而每个人都在说 Internet Explorer 10+ 支持 CORS?
【问题讨论】:
我面临着类似的问题。 ***.com/questions/24404705/…有人可以帮忙吗。 现在 IE 的团队在 SO,这确实需要解决。 【参考方案1】:Internet Explorer 对“同源”的定义与其他浏览器不同。请参阅 MDN 文档中关于同源策略的 IE Exceptions 部分:
Internet Explorer 在同源策略方面有两个主要例外:
信任区域:如果两个域都在高度信任区域,例如公司域,则不适用相同的来源限制 端口: IE 不将端口包含在同源组件中,因此http://company.com:81/index.html 和http://company.com/index.html 被视为同源并且没有应用限制。
因此,如果您的跨域请求发生在不同的端口,或者在 IE 的受信任区域之一内,IE 将不会将该请求视为跨域,并且不需要添加 Origin:
标头。
【讨论】:
您的来源的一个问题是它不是来自 Microsoft 网站。我在微软相关网站上的发现说这是一个可能会被“修复”的错误。奇怪的。可能是您的来源反映了主题观点,因为有人已经“得出结论”必须以特定方式? 我也对 Microsoft 代表在您的链接中使用的词语感到有些困惑。他们提到了“修复”,但他们也将问题描述为“与其他浏览器的长期互操作性差异,我们将不同的端口视为同源,而其他浏览器将它们视为跨源。” MDN 文档指出,这种“互操作性差异”也适用于受信任区域内的站点,这是我所经历行为的原因。 他们指的是“修复”,因为 IE 目前不遵守 RFC6454 规范,该规范说端口(无论是显式指定还是隐式指定)确实构成 Origin 身份的一部分。微软的另一个问题是,长期以来,微软对 Origins 的考虑不同(即不包括端口)。因此,如果他们“修复”行为以遵守规范,他们将破坏任何期望先前行为的人的代码。 (然后有人会对此提出一个错误......这是一个古老的辩论。)【参考方案2】:我刚刚在Microsoft associated site 上偶然发现了一个报告的错误,它清楚地描述了我的问题。微软员工很快得出结论:
没有足够的信息来重现你的行为 观察。
自从他们第一次发表评论和第一次尝试 (?) 以来,他们实际上已经设法在不同的端口上运行了两个不同的 Web 服务器并重现了该问题。微软的最新评论称他们“考虑在未来进行修复”。
【讨论】:
以上是关于Internet Explorer 11 不在 CORS 请求中添加 Origin 标头?的主要内容,如果未能解决你的问题,请参考以下文章
引导输入组在 Internet Explorer 中将表格推到超出屏幕宽度
如何从 Internet Explorer 11 降级到 Internet Explorer 10?
为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?