【发布时间】:2021-06-24 04:50:29
【问题描述】:
我正在尝试发出一个简单的 axios 请求,如下所示(我正在使用 Vue.js):
axios
.get(url),
.then(({ data }) => {
// ...
})
.catch(err => console.log(err))
但我收到以下错误:
Access to XMLHttpRequest at 'url' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Error: Network Error
at createError (createError.js?2d83:16)
at XMLHttpRequest.handleError (xhr.js?b50d:84)
我已经尝试添加以下标题,但还是不行
headers: {
"Access-Control-Allow-Origin": "*"
"mode":"no-cors"
}
但如果我尝试通过浏览器发出请求(只需复制和粘贴 url)一切正常。
有人知道如何帮助我吗?非常感谢!
【问题讨论】:
-
CORS 警告来自服务器而不是客户端,在这种情况下是您的 axios 调用,您能否向我们提供有关您正在使用的后端的更多信息,您定义为 url 应该有什么为您的请求启用 CORS
-
我的网址如下所示:api.taapi.io/…。 API 站点是这样的:taapi.io
-
更改我们的代码以使用此 url:jsonplaceholder.typicode.com/todos/1 ,它是一个占位符响应,我相信它应该可以工作,正如在需要在服务器而不是客户端上修复 CORS 问题之前指出的那样,如果你可以控制后端公开你需要在那里启用 CORS 的 url,那是 node.js 吗?
-
占位符响应工作正常。我无法控制后端。但是为什么如果我尝试通过浏览器发出请求(只需复制和粘贴 url)一切正常?
-
那是因为 CORS 检查的是来自不同来源的请求,与暴露 URL 的来源不同,例如您的客户端,如果是这种情况,它会检查其他来源是否有权获取资源。浏览器只是从它自己的来源呈现该资源,而不是交叉的。阅读这篇文章非常简洁且解释清楚:blog.container-solutions.com/…