根据我在IE9 / IE8中读到的关于CORS支持的所有文档,看起来很清楚:
XMLHttpRequest
在这些浏览器中发起CORS请求。您必须使用IE的专有XDomainRequest
。XDomainRequest
不支持预检。我对此限制的理解表明您只能发送POST或GET CORS请求,这些请求可能只包含simple headers。此外,微软还对XDR请求提出了其他非常奇怪的限制,但这在这里并不完全重要。所以,我所拥有的是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
。
我无法想象为什么这实际上有效。它似乎不应该有,除非我在这里遗漏了一些东西。有没有人有任何想法?
答案 0 :(得分:2)
经过一些调查和测试后,我意识到IE没有正确遵循RFC 6454 Section 5中编纂的“同源”的定义。特别是,IE认为具有不同端口的两个地址是相同的源,只要它们也使用相同的协议和主机。 RFC明确规定也应考虑该端口。
Microsoft在所有版本的IE中都没有正确遵守此RFC,包括IE10。惊喜,惊喜。因此,在IE10及更早版本中,我观察到的行为是预期的。在所有其他浏览器中,它不是。