相关疑难解决方法(0)

Access-Control-Allow-Origin标头如何工作?

显然,我完全误解了它的语义.我想到了这样的事情:

  1. 客户端从http:// siteA下载javascript代码MyCode.js - 原点.
  2. MyCode.js的响应头包含Access-Control-Allow-Origin:http:// siteB,我认为这意味着允许MyCode.js对站点B进行跨源引用.
  3. 客户端触发MyCode.js的一些功能,它们反过来向http:// siteB发出请求,尽管是跨源请求,但这应该没问题.

好吧,我错了.它根本不起作用.所以,我已经阅读了跨源资源共享,并尝试在w3c推荐中阅读跨源资源共享

有一件事是肯定的 - 我仍然不明白我应该如何使用这个标题.

我完全控制了站点A和站点B.如何启用从站点A下载的javascript代码以使用此标头访问站点B上的资源?

PS

我不想使用JSONP.

javascript cross-domain cors

1050
推荐指数
13
解决办法
144万
查看次数

尝试使用fetch和pass in模式:no-cors

我可以http://catfacts-api.appspot.com/api/facts?number=99通过Postman 点击这个终点并返回JSON

此外,我正在使用create-react-app,并希望避免设置任何服务器配置.

在我的客户端代码中我试图用fetch同样的东西,但我收到错误:

请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:3000 '访问.如果不透明响应满足您的需求,请将请求的模式设置为"no-cors"以获取禁用CORS的资源.

所以我试图传入一个对象,我的Fetch将禁用CORS,如下所示:

fetch('http://catfacts-api.appspot.com/api/facts?number=99', { mode: 'no-cors'})
  .then(blob => blob.json())
  .then(data => {
    console.table(data);
    return data;
  })
  .catch(e => {
    console.log(e);
    return e;
  });
Run Code Online (Sandbox Code Playgroud)

有趣的是,我得到的错误实际上是这个函数的语法错误.我不确定我的实际fetch是否已损坏,因为当我删除{mode:'no-cors'}对象,并为其提供不同的URL时,它可以正常工作.

我也尝试传入该对象{ mode: 'opaque'},但这会从上面返回原始错误.

我相信我需要做的就是禁用CORS ..我错过了什么?

javascript cors reactjs fetch-api create-react-app

101
推荐指数
6
解决办法
14万
查看次数

在 javascript 中使用 fetch 请求 API 有 CORS 策略错误

我正在尝试在我的 javascript 代码中使用 fetch 调用一些 API。我正在我的机器上使用 ReactJs 进行开发,并在同一网络中进行另一项开发,在另一台机器上使用 .net 开发 API。使用邮递员,我可以调用 API,但不能使用 fetch。我尝试在其他服务器中调用另一个 API,结果成功。

我正在使用 fetch 并尝试使用 axios。我在堆栈溢出的其他问题中发现了这个 API:https : //gturnquist-quoters.cfapps.io/api/random。答案说尝试获取它们,我尝试但再次抛出相同的错误。

我获取 gturnquist API 的代码:

const myHeader = new Headers();
myHeader.append('Content-Type', 'application/json');
fetch('http://gturnquist-quoters.cfapps.io/api/random', {
  method: 'GET', headers: myHeader,
})
 .then((res) => {
   console.log(res);
   return {};
 })
 .then(res => console.log(res));
Run Code Online (Sandbox Code Playgroud)

和我的代码来获取我需要的 API:

const myHeader = new Headers();

const token = 'mytoken';
myHeader.append('id-tenant', token);
myHeader.append('Content-Type', 'application/json');

const id = 'myid';
const url = 'myurl';

fetch(`http://10.1.1.35/${url}/${id}`, {
  method: 'GET',
  headers: myHeader, …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs fetch-api

0
推荐指数
1
解决办法
6507
查看次数