Internet Explorer 11不会在CORS请求中添加Origin标头?

时间:2013-12-26 11:39:59

标签: internet-explorer xmlhttprequest cross-domain cors

我的问题取决于我认为的几个假设。

假设nr 1:Origin Header

浏览器要求Origin标头放在CORS(跨域资源共享)请求上。

Wikipedia

  

要发起跨源请求,浏览器会发送请求   Origin HTTP标头。

HTML5 Rocks

  

首先要注意的是,有效的CORS请求总是包含   一个Origin标题。此Origin标头由浏览器添加,并且可以   不受用户控制。

W3

  

如果请求网址来源与原始网址不同   origin,将源origin设置为全局唯一标识符[..]。

假设nr 2:Internet Explorer 10+支持CORS

请参阅caniuse.com并使用谷歌获取数百种不同类型的来源,声称支持。

假设nr 3:不同的端口是不同的起源

使用不同端口号的资源被认为具有不同的来源:

Wikipedia

  

当且仅当,两个资源被认为是相同的来源   所有这些值完全相同。 [..]失败 - 相同的协议   和主持但不同的端口。

Mozilla Developer Network

  

如果协议,端口(如果是),则两个页面具有相同的来源   指定的),两个页面的主机相同。

问题:

在向同一域“localhost”发出CORS请求但使用不同端口(从8411到8080)时,Internet Explorer 11不会发送Origin标头。 Opera,FireFox和Chrome会发送Origin标头。然而,每个人都在说Internet Explorer 10 +支持CORS?

2 个答案:

答案 0 :(得分:18)

Internet Explorer对“同源”的定义与其他浏览器不同。请参阅相同来源政策的MDN文档的 IE Exceptions 部分:

  

对于相同的原始策略,Internet Explorer有两个主要的例外:

     
      
  • 信任区域:如果两个域都位于高度受信任的区域,例如公司域,则不会应用相同的原始限制
  •   
  • 端口: IE不包含进入Same Origin组件的端口,因此http://company.com:81/index.htmlhttp://company.com/index.html被视为来自同一来源,并且不会应用任何限制。
  •   

因此,如果您的跨源请求发生在不同的端口或IE的受信任区域内,IE将不会将请求视为跨源,并且不会添加Origin:标头。

答案 1 :(得分:3)

我碰巧偶然发现了{{3>}报告的错误,它清楚地描述了我的问题。微软员工很快得出结论:

  

没有足够的信息来重现您的行为   观察。

自从第一次评论和第一次尝试(?)以来,他们实际上设法在不同的端口上运行两个不同的Web服务器并重现了这个问题。微软的最新评论称他们“考虑在未来针对修复”。