我使用 vue 和 codeigniter 构建了一个应用程序,但是当我尝试获取 api 时出现问题,我在控制台上收到此错误
Access to XMLHttpRequest at 'http://localhost:8888/project/login'
from origin 'http://localhost:8080' has been blocked by CORS policy:
Request header field access-control-allow-origin is not allowed
by Access-Control-Allow-Headers in preflight response.
我一直在前端尝试这样(main.js)
axios.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
这在后端(控制器)
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
和vue登录方法
this.axios.post('http://localhost:8888/project/login', this.data, {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PATCH, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token"
}
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err.response);
});
我在stackoverflow中搜索并尝试过,但不起作用,我该如何解决?非常感谢你的帮助
原文由 Ashtav 发布,翻译遵循 CC BY-SA 4.0 许可协议
CORS 是服务器告诉客户端允许客户端发出什么样的 HTTP 请求。每当您看到
Access-Control-Allow-*
标头时,这些标头应该由服务器而不是客户端发送。服务器“允许”客户端发送某些标头。客户给自己许可是没有意义的。因此,请从您的前端代码中删除这些标头。axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
例如,假设您的后端设置了这个 cors 标头。
header("Access-Control-Allow-Methods: GET");
这意味着来自不同来源的客户端只允许发送 GET 请求,因此
axios.get
会工作,axios.post
会失败,axios.delete
会失败,等等