使用 Node 运行的 POST 请求和使用 React/Chrome 发送的请求有啥区别?
Posted
技术标签:
【中文标题】使用 Node 运行的 POST 请求和使用 React/Chrome 发送的请求有啥区别?【英文标题】:What's the difference between a POST request run with Node and a request sent with React/Chrome?使用 Node 运行的 POST 请求和使用 React/Chrome 发送的请求有什么区别? 【发布时间】:2018-09-21 22:35:26 【问题描述】:我正在测试 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 上运行?
【问题讨论】:
节点不是浏览器,因此不受 CORS 约束。 您是否在服务器端启用了 CORS? enable-cors.org/server.html 不要在请求中发送响应头 【参考方案1】:浏览器在 POST 请求之前发送一个安全强制的 OPTIONS 请求,以确定它所请求的服务器是否打算从浏览器当前所在的域接收请求。浏览器拒绝通过使用适当的 Access-Control*
标头响应 OPTIONS 请求来向未选择加入流量的服务器发送请求。
从节点repl运行没有这个限制。
这个问题更详细:How does the Chrome browser decide when to send OPTIONS?
【讨论】:
以上是关于使用 Node 运行的 POST 请求和使用 React/Chrome 发送的请求有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章