向 REST API 发送 POST 请求时没有“Access-Control-Allow-Origin”策略错误
Posted
技术标签:
【中文标题】向 REST API 发送 POST 请求时没有“Access-Control-Allow-Origin”策略错误【英文标题】:No 'Access-Control-Allow-Origin' policy error on sending POST request to REST API 【发布时间】:2021-03-17 23:32:47 【问题描述】:我正在制作一个简单的全栈项目,其中我有一个使用 NodeJS 和 Express 构建的非常基本的 REST API。它是一个服务器端呈现的网站。
在尝试登录时,当我向登录端点发送 POST 请求时,我在控制台中收到以下错误
在“http://127.0.0.1:3000/api/v1/users/login”访问 XMLHttpRequest 来自原点“http://localhost:3000”已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。
这是发送POST请求的代码sn-p
const login = async (email,password) =>
try
const res = await axios(
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
data:
email,
password
);
if(res.data.status === 'success')
alert('Logged in successfully');
window.setTimeout(() =>
location.assign('/');
, 1500);
catch(err)
console.log(err);
请解释我收到该错误的原因以及如何修复它。该 API 尚未部署,它正在 localhost 上运行
【问题讨论】:
【参考方案1】:您能否在请求中添加 Access-Control-Allow-Origin 标头并查看,
const login = async (email,password) =>
try
const res = await axios(
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
headers:
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
,
data:
email,
password
);
if(res.data.status === 'success')
alert('Logged in successfully');
window.setTimeout(() =>
location.assign('/');
, 1500);
catch(err)
console.log(err);
【讨论】:
【参考方案2】:您的请求来源是:
http://localhost:3000
这与您将请求发送到的域不同:
http://127.0.0.1:3000
为避免此 CORS 错误,FQDN 必须相同,包括主机名和端口。 (或者您可以为 CORS 配置您的服务器。)就服务器而言,不同的主机意味着一个完全独立的实体,即使它是同一台机器。
将您的网址更改为:
url: 'http://localhost:3000/api/v1/users/login',
【讨论】:
我尝试了这个解决方案,它似乎已经修复了与 CORS 相关的错误,但由于以下错误,请求仍未成功执行 Error: Request failed with status code 400 at e.exports ( spread.js:25) 在 e.exports (spread.js:25) 在 XMLHttpRequest.l.onreadystatechange (spread.js:25) ***.com/questions/44731340/…以上是关于向 REST API 发送 POST 请求时没有“Access-Control-Allow-Origin”策略错误的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 REST API Jersey 中检测预检请求?
使用 Python 向 API Prestashop 发送 POST 请求
无法通过 HTTPClient 向 REST 发送 post 请求
在Angular 4中将数据发送到JAVA post REST API时出现CORS错误
NodeJS - 只有 OPTIONS 请求被发送到 REST API,POST 或 GET 不跟随(Cloudflare)