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

Axios iOS端Authorization Bearer请求头未发送问题求助

解决iOS 11.3.1下Axios无法附加Authorization请求头的问题

这个问题我之前也碰到过,核心原因是iOS 11.3.1版本的WebKit内核在处理XMLHttpRequest请求头时存在兼容性bug,再加上Axios全局默认头的设置逻辑在旧内核下的适配问题,导致Authorization头无法被正确附加。下面分点拆解原因和可行的解决方案:

可能的问题根源

  • Axios全局默认头配置失效:window.axios.defaults.headers.common这种全局配置方式,在iOS 11.3.1的WebKit内核中可能无法被正确同步到每个请求上,哪怕你单独给单个请求手动设置头,也会受同样的内核问题影响。
  • WebKit的请求头处理异常:这个版本的WebKit对自定义请求头的处理存在bug,无论是跨域还是同域请求,都可能自动丢弃Authorization这类自定义头,或者在预请求(OPTIONS)中没有正确携带头信息,最终导致服务器返回401。

可行的解决方案

1. 用Axios请求拦截器替代全局默认头设置

拦截器会在每个请求发起前动态注入请求头,比全局默认配置更可靠,能绕过旧WebKit的bug。代码示例:

// 替换原来的全局头设置,改用请求拦截器
axios.interceptors.request.use(function(config) {
  const accessToken = localStorage.getItem('access_token');
  if (accessToken) {
    // 直接给当前请求的headers赋值
    config.headers.Authorization = `Bearer ${accessToken}`;
  }
  return config;
}, function(error) {
  return Promise.reject(error);
});

2. 用原生XMLHttpRequest测试(排除Axios的问题)

如果拦截器还是无效,试试用原生XHR直接设置请求头,确认是WebKit的问题还是Axios的问题:

const xhr = new XMLHttpRequest();
xhr.open('GET', '你的API地址', true);
xhr.setRequestHeader('Authorization', `Bearer ${localStorage.getItem('access_token')}`);
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4) {
    console.log('响应状态:', xhr.status);
    console.log('响应内容:', xhr.responseText);
  }
};
xhr.send();

如果原生XHR也无法携带头,那就是iOS 11.3.1的WebKit内核本身的问题,可以考虑临时方案:比如通过URL参数传递token(注意仅限低敏感接口,避免安全风险),或者服务器端针对iOS 11.3.1的请求做兼容处理。

3. 调整Axios版本

如果你的Axios版本比较新(比如0.22+),这类版本可能已经不再兼容iOS 11这类旧系统。可以尝试降级到Axios 0.21.x版本,这个版本对旧WebKit的兼容性更好:

# 降级到0.21.4(稳定兼容旧iOS的版本)
npm install axios@0.21.4 --save

4. 检查跨域请求的服务器配置

如果是跨域场景,确保服务器对OPTIONS预请求的响应中包含Access-Control-Allow-Headers: Authorization,否则iOS 11.3.1的WebKit会拒绝发送带Authorization头的实际请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:27:27