使用Node运行的POST请求与使用React / Chrome发送的请求之间有什么区别?

时间:2018-04-11 22:26:38

标签: javascript node.js reactjs post cors

我正在测试Robinhood API,我需要做的第一件事是使用API​​登录。当我运行node login.js

时,我能够使用以下代码登录
var axios = require('axios')
axios.post('https://api.robinhood.com/api-token-auth/', {
      username: 'email@email.com',
      password: '********'
    }, {
       headers: {'Access-Control-Allow-Origin': '*'}
    }).then(function (response) {
        console.log(response.data);
    })

但是,当我在浏览器中使用React尝试相同的代码时,收到No 'Access-Control-Allow-Origin'错误。如果我在Chrome中启用Access-Control-Allow-Origin,则不会发生错误,我可以登录。

我已经包含了Access-Contrl-Allow-Origin标题。问题似乎是Node和React / Chrome之间的差异?

什么允许代码与Node一起运行但不与React / Chrome一起运行?

1 个答案:

答案 0 :(得分:0)

浏览器在POST请求之前发送安全性要求的OPTIONS请求,以查明它请求​​打算从浏览器当前所在域接收请求的服务器。浏览器拒绝向未选择加入流量的服务器发送请求,方法是使用相应的Access-Control*标头响应OPTIONS请求。

从节点repl运行没有这样的限制。

这个问题更详细:How does the Chrome browser decide when to send OPTIONS?