我通过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.
答案 0 :(得分:1)
您正在制作跨域请求(您的请求域与API域不同),浏览器对此有特殊规定。在节点上下文中(即通过节点的http
/ https
模块),您不必担心CORS,并且通常可以对网络请求进行较低级别的工作。另一方面,浏览器在CORS上有很多安全性。当您使用fetch
时,您的网络请求将通过Chromium的网络层,因此受到这些限制。当您使用节点的http / https时,您正在使用节点。这是关于Electron的一个令人困惑的问题 - 渲染器过程看起来像一个普通的Web上下文,但你实际上可以访问所有node.js' API也允许您在普通浏览器中执行的操作。
我会检查并查看在该请求中包含API密钥是否会更改API的响应(可能会触发其API添加适当的CORS标头,如Access-Control-Allow-Origin)。也许API并不意味着在浏览器上下文中调用,因此更多的node.js方法是可行的。
这是一篇关于CORS及其处理方法的精彩文章:https://medium.com/@baphemot/understanding-cors-18ad6b478e2b