我正在测试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一起运行?
答案 0 :(得分:0)
浏览器在POST请求之前发送安全性要求的OPTIONS请求,以查明它请求打算从浏览器当前所在域接收请求的服务器。浏览器拒绝向未选择加入流量的服务器发送请求,方法是使用相应的Access-Control*
标头响应OPTIONS请求。
从节点repl运行没有这样的限制。
这个问题更详细:How does the Chrome browser decide when to send OPTIONS?