【发布时间】:2019-09-27 18:28:33
【问题描述】:
我正在使用 fetch 使用 API,但出现 CORS 错误。 我尝试了多个标题,但我不明白这是什么问题。
我不是 API 的所有者,所以我无法更改它,但请检查它返回的响应 access-control-allow-origin。
以下是我的请求方法:
export const execPOST = (url, body) => {
return fetch(url, {
method: "POST",
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json"
},
body: JSON.stringify(body)
});
};
回复是:
Request URL: http://api
Request Method: OPTIONS
Status Code: 405 Method Not Allowed
Remote Address: ip
Referrer Policy: no-referrer-when-downgrade
Response Headers:
Access-Control-Allow-Origin: *
以上回复还不足以允许我的请求吗?
控制台错误:
OPTIONS
http://apinet::ERR_ABORTED 405(不允许的方法) 从源'http://localhost:3000'在'http://api'获取的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。
我使用"https://cors-anywhere.herokuapp.com/" 得到了这个工作(同时我正在开发),但我认为我不应该将它用于生产环境。
我找到了很多关于这个问题的材料,但是除了实现一个后端来发出请求或使用其他东西作为代理来发出请求等等之外,没有任何其他的工作......
【问题讨论】:
-
是什么让您说您收到 CORS 错误?... 显然该错误是因为您所针对的端点不允许该方法。可以试试用rest客户端调试吗?
-
我编辑了我的问题,添加了 chrome 控制台日志。使用 postman 或 soapui 就可以了
-
API 不响应 OPTIONS 请求(也称为预检)。为避免预检,请勿设置自定义标头。
-
我认为你只是运气不好。
-
在您的请求中设置 Access-Control-Allow-Origin 标头没有意义...这是服务器设置的标头,用于指示您是否可以通过跨域请求访问 URL或不。它是 CORS 安全性的重要组成部分。如果请求者可以将标头设置为他们想要的任何内容,那么显然它不会提供任何安全性
标签: javascript reactjs cors fetch-api