为什么我的axios请求拦截器设置的headers没生效?

UI巧云 阅读 52

在用axios写请求拦截器时,明明在config.headers里加了token,但抓包发现请求头里始终没有这个字段,这是怎么回事?

我的代码是这样的:


axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  config.headers.Authorization = <code>Bearer ${token}</code>;
  return config;
}, error => Promise.reject(error));

已经检查过localStorage确实有token值了,控制台也没有报错,但每次请求的Authorization头都为空。之前用同样的写法在另一个项目没问题,这次换了新项目就这么奇怪…

我来解答 赞 8 收藏
二维码
手机扫码查看
1 条解答
程序猿怡萱
这个问题大概率是因为请求的 Content-Type 不一样导致的。如果请求是 multipart/form-data 类型,浏览器会自动覆盖你设置的 headers,尤其是涉及到 Authorization 这种字段。

你可以先确认下请求的 Content-Type 是不是 multipart/form-data,比如上传文件的时候经常会遇到这种情况。

直接用这个代码改一下你的拦截器:

axios.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) {
// 检查是否有 headers,没有就初始化
config.headers = config.headers || {};
// 强制添加 Authorization
config.headers['Authorization'] = Bearer ${token};
}
return config;
}, error => Promise.reject(error));


另外,如果你的项目用了自定义的 axios 实例或者第三方封装库(比如 axios 的某些封装工具),记得检查是不是被覆盖了 headers。

还有个常见问题是,有些后端框架对大小写敏感,默认只认首字母大写的 Authorization,所以最好统一格式。

实在不行,抓包看下最终发出的请求到底长啥样,再针对性调整。别忘了确认下项目的 axios 版本,老版本可能有坑。
点赞
2026-02-16 22:05