如果 CORS 拒绝我的 API 请求并且我不控制服务器,我无能为力吗? [复制]

Posted

技术标签:

【中文标题】如果 CORS 拒绝我的 API 请求并且我不控制服务器,我无能为力吗? [复制]【英文标题】:If CORS if refusing my API request and I don't control the server, is there nothing I can do? [duplicate] 【发布时间】:2020-03-29 05:01:11 【问题描述】:

据我了解,在其服务器上托管内容的人可以设置 CORS 标头,指定谁可以访问此内容以及他们可以使用它做什么。所有者还可以通过使用 Access-Control-Allow-Origin 标头仅允许特定站点来阻止某些站点访问这些项目。

这些是否正确,还是我误解了 CORS 的工作原理?

我正在尝试从我无法控制的服务器访问信息,并且收到以下 CORS 错误。我正在使用所有者提供的 API,但我正在从我的 localhost 开发服务器发出请求,我想知道这是否会导致问题?我正在使用 Quasar 和 Vue 进行开发,而且我对一般开发非常非常陌生 - 请原谅任何明显的错误/疏忽。

这是我的代码:

var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener('readystatechange', function () 
    if (this.readyState === this.DONE) 
        console.log(this.responseText);
    
);

xhr.open('GET', 'url');
xhr.setRequestHeader('X-Correlation-Id', 'id');
xhr.setRequestHeader('content-type', 'something+json; UTF-8');
xhr.setRequestHeader('authorization', 'Basic username:password');

xhr.send(data);

我收到了这个:

从源“http://localhost:8080”访问“url”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头的值当请求的凭据模式为“包含”时,响应中的内容不能是通配符“*”。 XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。

我几乎不知道这意味着什么,我已经阅读了大量内容试图理解它。如果有明显的修复,请进一步向我解释 - 谢谢!

【问题讨论】:

使用您自己的服务器来“代理”您的请求 - 但您尝试访问的服务器似乎想要允许 CORS,只是在您设置 withCredentials 时不正确 - 您确定吗你需要 withCredentials true 吗? 【参考方案1】:

您始终可以使用 CORS 代理,例如 cors-anywhere,甚至可以使用 make your own。

【讨论】:

以上是关于如果 CORS 拒绝我的 API 请求并且我不控制服务器,我无能为力吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

API 网关 CORS 问题

getstream.io 获取 CORS 请求被拒绝:https://api.stream-io-api.com/api/v1.0/feed/user

AJAX CORS http 请求 nginx 拒绝

AngularJS $http 对 Web 服务的请求需要 CORS

启用 CORS 的服务器不拒绝请求

在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。