【发布时间】:2018-10-05 03:03:30
【问题描述】:
我正在尝试在不禁用浏览器中的 CORS 的情况下进行 API 调用。该应用程序是使用 react-create-app 创建的。它使用 webpack 和 webpackDevServer 进行开发。我在这里找到的所有答案都说将以下代码放入我的webpack.config 文件中。
devServer: {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
}
}
但是,我已经在许多不同的地方尝试过,但它不起作用。
我继续收到错误:
加载资源失败:服务器响应状态为500()
和
加载失败...对预检请求的响应未通过访问 控制检查:不存在“Access-Control-Allow-Origin”标头 请求的资源。因此,原点 'http://localhost:3000' 是 不允许访问。响应的 HTTP 状态代码为 500。
我还尝试将我的调用从 axios 调用更改为 fetch 调用
return fetch(process.env.REACT_APP_API_URL + "/prod/user", {
mode: 'no-cors',
credentials: 'include',
method: "GET",
headers: {
"x-api-key": process.env.REACT_APP_API_KEY
}
})
.then(response => {
return response.json()
})
.then(resp => dispatch(receiveUsers(resp.data)))
.catch(error => {console.log(error)})
这让我更接近了,但控制台现在正在返回
Response {type: "opaque", url: "", redirected: false, status: 0, ok: false, …}
如何解决这个 CORS 问题?提前感谢您的帮助!
【问题讨论】:
-
好吧,CORS 是一种安全功能,理想情况下,不应避免使用它。您有权访问 API 源代码吗?如果是,您需要允许您正在开发的 URL。
Origin 'http://localhost:3000' is therefore not allowed access.这些,所以添加localhost和localhost:3000。如果您没有访问权限,则需要代理请求。
标签: reactjs webpack cors fetch axios