【问题标题】:Is the "No 'Access-Control-Allow-Origin' header" error message from the browser or from XmlHttpRequest?“No 'Access-Control-Allow-Origin' header”错误消息是来自浏览器还是来自 XmlHttpRequest?
【发布时间】:2015-02-16 01:34:36
【问题描述】:

使用以下代码执行(故意失败)跨域请求时:

var request = new XMLHttpRequest();
request.open("GET", 'http://code.jquery.com/jquery-2.1.1.min.js');
request.onerror = function(error) {
    alert(error.target.status)
};
request.send()

我将在开发者控制台中收到以下预期错误消息:

XMLHttpRequest cannot load http://code.jquery.com/jquery-2.1.1.min.js No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

但是这个错误消息是来自 XmlHttpRequest 还是来自浏览器?

我想从 XmlHttpRequest 中获取该错误消息,但我看不到在哪里。

使用上面的代码,我希望(如在https://stackoverflow.com/a/16931075/343475 中看到的)会在警告框中看到一条错误消息,但我得到的只是0

【问题讨论】:

  • 您正在尝试从与您的域不同的域加载页面,并且浏览器会告诉您,因为该域没有响应“Access-Control-Allow-Origin”标头不会执行 HTTP 请求。所以,是浏览器告诉你“不”。
  • @Pointy 你错过了问题的重点。 OP没有问错误是什么。 OP 正在询问它是从哪里生成的,以便他可以获得正确的错误消息。
  • 刚刚看到这个:根据stackoverflow.com/a/5022962/343475的回答,是浏览器,javascript无法捕捉到错误。
  • @epascarello 不,我明白这一点,我想我已经回答了,因为我说消息来自浏览器。
  • XmlHttpRequest 类是浏览器的一部分,因此区分它们没有意义。

标签: javascript xmlhttprequest


【解决方案1】:

但是这个错误消息是来自 XmlHttpRequest 还是来自浏览器?

XMLHttpRequest 是浏览器的一部分。所以“是”。

如果您的意思是“是来自服务器还是来自浏览器的错误”,那么它来自浏览器。服务器无法知道您是否正在发出跨域请求。

使用上面的代码,我希望(如在https://stackoverflow.com/a/16931075/343475 中看到的)会在警告框中看到一条错误消息,但我得到的只是 0。

状态码将提供有关外源资源的信息(它会告诉您资源是否存在以及浏览器的用户是否有权访问它)因此它被同源策略禁止。

【讨论】:

  • '服务器不知道你是否在做一个跨域请求'说得很清楚,如果你考虑一下就很有意义。
猜你喜欢
  • 1970-01-01
  • 2014-03-05
  • 2018-11-10
  • 2016-02-14
  • 1970-01-01
  • 2014-10-08
  • 2018-02-04
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多