0

根据我在 IE9/IE8 中阅读的有关 CORS 支持的所有文档,似乎很清楚:

  1. 您无法在这些浏览器中使用XMLHttpRequest. 您必须使用 IE 的专有 XDomainRequest.
  2. XDomainRequest不支持预检。我对这个限制的理解表明您只能发送 POST 或 GET CORS 请求,并且这些请求可能只包含简单的标头。此外,微软对 XDR 请求还有其他非常奇怪的限制,但这在这里并不完全重要。

所以,我所拥有的是一个页面http://192.168.1.1:8080。使用XMLHttpRequest时,我试图向 发送 DELETE 请求http://192.168.1.1.9000。我完全预料到这会失败。在我重新考虑相关请求以确保它在我切换到使用 XDR 后适用于 CORS 请求之前,我只是在进行完整性检查。同样,我在这里使用 IE8。

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

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

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

4

1 回答 1

2

经过一些调查和测试,我意识到 IE 没有正确遵循RFC 6454 第 5 节中对“同源”的定义。特别是,IE 将具有不同端口的两个地址视为同一来源,前提是它们也使用相同的协议和主机。RFC 明确指出还应考虑端口。

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

于 2013-06-06T19:57:46.337 回答