Axios 跨域问题解决方案
跨域问题通常由浏览器的同源策略引起,可通过以下方法解决:
后端配置CORS
后端需在响应头中添加以下字段:
Access-Control-Allow-Origin: * // 或指定域名
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type
开发环境代理配置(Vue/React)
在 vite.config.js 或 webpack.config.js 中配置代理:
server: {
proxy: {
'/api': {
target: 'http://target-domain.com',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '')
}
}
}
Nginx反向代理
修改Nginx配置文件:
location /api/ {
proxy_pass http://backend-server;
add_header 'Access-Control-Allow-Origin' '*';
}
接口调试实践方法
浏览器开发者工具
通过Network面板检查请求头、响应体和状态码,重点关注:
Request Headers中的 Origin 字段
Response Headers中的CORS相关字段
预检请求(OPTIONS)的响应状态
Postman测试
直接发送请求验证接口功能,排除前端代码干扰。注意:
手动添加 Content-Type: application/json 等必要头信息
检查原始响应数据格式
Axios拦截器配置
添加请求/响应拦截器辅助调试:
axios.interceptors.request.use(config => {
console.log('Request:', config);
return config;
});
axios.interceptors.response.use(response => {
console.log('Response:', response);
return response;
});
常见问题排查
预检请求失败
检查服务端是否正确处理OPTIONS方法,返回状态码应为204。
凭证携带问题
需要跨域传递cookie时,需同时设置:
axios.defaults.withCredentials = true;
后端需配置:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: 具体域名(不可为*)
Content-Type引发的CORS
当请求头包含 application/json 时,可能触发预检请求,确保后端允许该头信息。