允许通过IE9或更早版本的XHR进行CORS DELETE请求

时间:2013-06-06 14:19:19

标签: internet-explorer xmlhttprequest cors xdomainrequest

根据我在IE9 / IE8中读到的关于CORS支持的所有文档,看起来很清楚:

  1. 您无法使用XMLHttpRequest在这些浏览器中发起CORS请求。您必须使用IE的专有XDomainRequest
  2. XDomainRequest不支持预检。我对此限制的理解表明您只能发送POST或GET CORS请求,这些请求可能只包含simple headers。此外,微软还对XDR请求提出了其他非常奇怪的限制,但这在这里并不完全重要。
  3. 所以,我所拥有的是http://192.168.1.1:8080的页面。使用XMLHttpRequest,我试图向http://192.168.1.1.9000发送DELETE请求。我完全相信这会失败。在我重新考虑相关请求之前,我只是进行了一次完整性检查,以确保在切换到使用XDR后它可以用于CORS请求。再次,我在这里使用IE8。

    var xhr = new XMLHttpRequest();
    xhr.open("DELETE", "http://192.168.1.1:9000", true);
    xhr.send();
    

    奇怪的是,请求似乎成功了。 DELETE操作处理程序在端口9000上的服务器上命中。我返回了一个响应,我能够访问XHR对象实例上的responseText

    我无法想象为什么这实际上有效。它似乎不应该有,除非我在这里遗漏了一些东西。有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

经过一些调查和测试后,我意识到IE没有正确遵循RFC 6454 Section 5中编纂的“同源”的定义。特别是,IE认为具有不同端口的两个地址是相同的源,只要它们也使用相同的协议和主机。 RFC明确规定也应考虑该端口。

Microsoft在所有版本的IE中都没有正确遵守此RFC,包括IE10。惊喜,惊喜。因此,在IE10及更早版本中,我观察到的行为是预期的。在所有其他浏览器中,它不是。