Axios对接Django时响应拦截器无法获取响应状态的问题
Axios 401响应拦截器遇"Network Error"问题解决
问题场景
以下是用于处理401状态的Axios响应拦截器代码:
// Add a 401 response interceptor window.axios.interceptors.response.use(function (response) { return response; }, function (error) { if (401 === error.response.status) { // handle error: inform user, go to login, etc } else { return Promise.reject(error); } });
实际运行时触发"Network Error",且无法获取任何响应详情。
问题原因
这是CORS跨域配置异常导致的:浏览器出于安全限制,当服务端CORS配置不符合规范时,会直接拦截跨域响应,Axios无法拿到包括401状态码在内的任何响应数据,只能抛出通用的"Network Error"。
解决方案
该问题必须从服务端调整CORS配置来解决,核心配置要点:
- 正确设置
Access-Control-Allow-Origin:如果前端请求携带凭证(如Cookie、HTTP认证信息),不能使用通配符*,需指定具体的前端域名 - 配置
Access-Control-Expose-Headers:若需要让前端获取自定义响应头,需在该字段中声明 - 确保服务端在返回401等错误状态码时,能正常完成响应流程,不能直接中断请求,否则浏览器会判定为跨域异常
注意:前端的拦截器代码本身逻辑无问题,但由于CORS限制,代码根本无法进入判断error.response.status的分支,优先解决服务端CORS配置是关键。
内容的提问来源于stack exchange,提问作者Nzr
相关产品推荐
相关产品推荐

