You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios实例GET请求未携带Authorization头,POST请求正常问题排查

解决Axios GET请求不携带Bearer令牌的问题

可能的原因及对应解决方案

1. 确认Axios实例的Authorization头是否真的生效

在GET请求执行前,打印Axios实例的默认头,排查token是否正确设置:

console.log(apiClient.defaults.headers.common);

如果输出中Authorization是Bearer undefined,说明你的token获取逻辑有问题,导致头无效,浏览器会自动忽略这个格式错误的头。

2. 检查请求拦截器是否篡改了GET请求的头

如果你的Axios实例配置了请求拦截器,排查是否有针对GET请求移除Authorization头的代码:

// 检查拦截器里的逻辑
apiClient.interceptors.request.use(config => {
  // 警惕这种针对GET请求删除头的代码
  if (config.method === 'get') {
    // delete config.headers.Authorization;
  }
  return config;
});

3. 浏览器缓存导致旧请求被复用

浏览器会缓存GET请求,如果之前的请求没有带Authorization头,后续可能直接读取缓存,不会发送新请求。可以通过两种方式验证:

  • 在浏览器开发者工具的「网络」面板勾选禁用缓存,重新发起请求
  • 给GET请求添加随机参数,强制浏览器发送新请求:
    apiClient.get(`posts/${router.query.id}/`, {
      params: { _: Date.now() }
    });
    

4. Django后端CORS配置限制

如果使用django-cors-headers,确保配置允许Authorization头:

# settings.py
CORS_ALLOW_HEADERS = [
    # 其他允许的头
    'authorization',
]
# 如果你的请求需要携带凭证(比如cookie),还需要开启:
CORS_ALLOW_CREDENTIALS = True

如果后端没有允许Authorization头,浏览器可能会在跨域GET请求中自动省略这个头。

5. 显式给GET请求设置头(兜底方案)

如果以上方法都无效,直接在GET请求中显式指定headers,绕过默认头的问题:

apiClient.get(`posts/${router.query.id}/`, {
  headers: {
    'Authorization': `Bearer ${token}`
  }
});

关于OPTIONS请求的说明

POST前的OPTIONS是浏览器自动发送的预检请求,用于确认后端允许自定义头和POST方法。这个预检请求本身不会携带Authorization头,但只要预检通过,后续的POST请求就会正常携带令牌。这和GET请求不带头没有直接关联——GET请求如果属于「简单请求」(比如没有自定义头、Content-Type为application/x-www-form-urlencoded等),不会触发预检,会直接发送请求。

内容的提问来源于stack exchange,提问作者kirill ras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:22:38