【发布时间】:2018-02-09 00:53:16
【问题描述】:
我在 React Web 应用程序中使用 Axios 进行 API 调用。但是,我在 Chrome 中收到此错误:
XMLHttpRequest cannot load https://example.restdb.io/rest/mock-data. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
{
axios
.get("https://example.restdb.io/rest/mock-data", {
headers: {
"x-apikey": "API_KEY",
},
responseType: "json",
})
.then((response) => {
this.setState({ tableData: response.data });
});
}
我还在 Stack Overflow 上阅读了几个关于同一问题的答案,标题为 Access-Control-Allow-Origin,但仍然无法弄清楚如何解决这个问题。我不想在 Chrome 中使用扩展程序或使用临时 hack 来解决这个问题。请提出解决上述问题的标准方法。
在尝试了几个答案后,我尝试了这个,
headers: {
'x-apikey': '59a7ad19f5a9fa0808f11931',
'Access-Control-Allow-Origin' : '*',
'Access-Control-Allow-Methods':'GET,PUT,POST,DELETE,PATCH,OPTIONS',
},
现在我得到的错误是,
Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response
【问题讨论】:
-
检查您收到的响应中的 HTTP 响应代码。您是否从中获得 200 OK?因为当我查看它时,我看到了 503“服务不可用”。尝试直接浏览example.restdb.io/rest/mock-data,我想至少在那里你会看到同样的东西。因此,如果服务器以 503 响应,您的请求将无法正常工作。我认为您收到 CORS 错误消息的唯一原因是因为许多服务器通常不发送 Access-Control-Allow-Origin 5xx 响应或其他响应。他们只发送成功响应(例如,200 OK)。
-
不要将 Access-Control-Allow-Origin 添加到您的请求中。该标头严格来说只是一个 response 标头,供服务器在响应中发回给您。将它添加到请求中的唯一效果是破坏事物。与 Access-Control-Allow-Methods 标头相同。将这些添加到您的请求中不会阻止浏览器遇到问题中引用的第一个错误。
标签: javascript reactjs axios