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

Expo开发React Native:iOS端HTTP请求丢失Authorization头求解决方案

解决方案

1. 检查请求头的拼写与格式

确保请求头键名是**Authorization**(注意大小写,iOS对HTTP头的大小写敏感程度和Android存在差异),且Bearer Token格式正确:

// fetch示例
fetch('http://你的本地NestJS地址/api/xxx', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + yourToken, // 注意Bearer后有空格
    'Content-Type': 'application/json'
  }
})

// axios示例
axios.get('http://你的本地NestJS地址/api/xxx', {
  headers: {
    'Authorization': 'Bearer ' + yourToken
  }
})

2. 调整NestJS后端CORS配置

在main.ts中明确允许Authorization头,iOS对CORS响应头的检查比Android更严格:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors({
    origin: true, // 开发环境临时允许所有来源,生产环境需指定具体域名
    allowedHeaders: ['Content-Type', 'Authorization'], // 必须明确列出自定义头
    credentials: true
  });
  await app.listen(3000);
}
bootstrap();

3. 配置Expo的iOS ATS规则

因为后端是本地HTTP服务,iOS默认会限制非HTTPS请求,需在app.json中添加ATS例外:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSAppTransportSecurity": {
          "NSExceptionDomains": {
            "localhost": {
              "NSIncludesSubdomains": true,
              "NSAllowsLocalNetworking": true
            }
          }
        }
      }
    }
  }
}

配置完成后重启Expo Go,重新加载项目。

4. 清除Expo Go缓存

iOS的Expo Go可能缓存旧配置导致请求头不生效:

  • 完全关闭Expo Go应用
  • 进入手机「设置」→「Expo Go」→「清除缓存」
  • 重新打开Expo Go并加载项目

5. 验证请求头是否真的丢失

在NestJS后端添加日志中间件,打印所有请求头,确认iOS端请求是否确实未携带Authorization:

// 在main.ts中添加中间件
app.use((req, res, next) => {
  console.log('请求头:', req.headers);
  next();
});

如果后端能收到头,则排查后续鉴权逻辑的平台差异;若未收到,再重复检查前面的配置步骤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:30:09