Fetch API无法在Electron中加载

时间:2018-02-05 09:38:24

标签: node.js cross-domain electron fetch

我通过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.

1 个答案:

答案 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