为啥一些跨域 XMLHttpRequest 请求不返回 CORS 错误
Posted
技术标签:
【中文标题】为啥一些跨域 XMLHttpRequest 请求不返回 CORS 错误【英文标题】:Why do some cross domain XMLHttpRequest requests NOT return CORS error为什么一些跨域 XMLHttpRequest 请求不返回 CORS 错误 【发布时间】:2017-08-08 08:42:32 【问题描述】:对于某些 API,数据很容易访问,并且不会引发以下 CORS 错误。
XMLHttpRequest 无法加载 http://external.service/。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://my.app' 因此不允许访问。
我很困惑为什么它不会引发错误。
在 Node.js 中,当我想在我的服务器上启用 CORS 时,我必须这样做:
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
我假设以下 API 已以类似方式设置,但我正在寻找验证是否属实。我希望我的理解在技术上是准确的。
如果有其他解释,我想知道。
一些不引发 CORS 错误的 API 示例如下:
https://itunes.apple.com/hk/rss/topalbums/limit=10/json
http://www.omdbapi.com/?s=Star%20Wars&r=json
https://api.github.com/users/用户名
【问题讨论】:
你看标题了吗? 他们都发出access-control-allow-origin
标题 - 那么,问题是什么?
没有答案。就像我在查询中所说的那样,我只是想要验证。
保证如果浏览器发出成功的跨源请求,则服务器正在发送 CORS 标头 ... CORS 不是“可选”且不能“绕过”
当你说 CORS 不能被绕过时,我很困惑。当发送“access-control-allow-origin”标头并且数据可用时,会调用什么? CORS 是一个无法绕过的标准,但是通过设置标头可以访问数据并绕过错误 - 正确吗?
【参考方案1】:
是的,您的理解在技术上是准确的。您可以从您提到的 API 示例(或任何其他支持 CORS)的响应中看到标头,并且它们都像您一样包含标头在您的 Node.js 应用程序中。
现在他们可能不会在 Node.js 中这样做,但为响应添加标头是所有可能的 Web 框架的基本内容,或者只是在 Web 服务器本身中设置一些配置的问题。
这是一个Postman 屏幕截图,显示了来自 github api 响应的标头。
【讨论】:
以上是关于为啥一些跨域 XMLHttpRequest 请求不返回 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章