我有一个通过 React CLI 设置的电子应用程序。它似乎工作正常,但是当我尝试执行外部HTTP请求时:
https.get('https://blockchain.info/q/24hrprice', (result) => {
console.log('RATE: ', result);
});
我得到:
Fetch API cannot load https://blockchain.info/q/24hrprice.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:3000' is therefore not allowed access.
If an opaque response serves your needs,
set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
您正在发出跨域请求(您的请求域与 API 的域不同),浏览器对此有特殊规则。在节点上下文中(即通过节点的http
/https
模块),您不必担心 CORS,并且通常可以对网络请求执行较低级别的工作。另一方面,浏览器在CORS周围有很多安全性。当您使用fetch
时,您的网络请求将通过 Chromium 的网络层,因此它受到这些限制。当你使用node的http/https时,你正在使用node的。关于Electron,这是一个令人困惑的点 - 渲染器过程看起来像一个普通的Web上下文,但实际上你也可以访问所有node.js的API,允许你在普通浏览器中无法做的事情。
我会检查并查看在该请求中包含 API 密钥是否会更改 API 的响应(也许这会触发他们的 API 添加适当的 CORS 标头,如访问控制允许来源)。也许 API 不是要在浏览器上下文中调用的,因此更面向节点.js方法是要走的路。
这是一篇关于CORS及其处理方法的好文章:https://medium.com/@baphemot/understanding-cors-18ad6b478e2b