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

React项目中使用Fetch获取响应头Authorization令牌失败求助

如何在React的Fetch请求中获取响应头里的Authorization令牌

问题根源

你遇到的情况是CORS(跨域资源共享)的默认限制导致的:浏览器本身能接收到Authorization响应头,但出于安全考虑,只有被后端明确标记为可暴露的响应头,才能被前端的JavaScript代码(比如Fetch API)访问到。Authorization不在CORS默认允许暴露的头列表里,所以即使Network面板能看到,Fetch也拿不到。

解决方法

需要分两步操作:

1. 后端配置:暴露Authorization响应头

后端必须在登录接口的响应中添加Access-Control-Expose-Headers头,明确允许前端访问Authorization。以下是几种常见后端框架的配置示例:

  • Node.js/Express:
    // 在登录接口的响应逻辑中添加
    res.setHeader('Access-Control-Expose-Headers', 'Authorization');
    res.setHeader('Authorization', 'Bearer your-token-content');
    
  • Java Spring Boot:
    // 在接口方法上添加跨域配置并设置响应头
    @CrossOrigin(exposedHeaders = "Authorization")
    @PostMapping("/login")
    public ResponseEntity<?> login(@RequestBody LoginRequest request) {
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer your-token-content");
        return new ResponseEntity<>(loginResult, headers, HttpStatus.OK);
    }
    

2. 前端代码修正

你的代码里还有两处需要调整:一是body参数需要把对象转为JSON字符串,二是要正确解析响应体数据。修正后的login函数如下:

async login(dataLogin) {
  const response = await fetch(`${API_URL}/login`, {
    method: "post",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify(dataLogin) // 将登录参数转为JSON字符串
  });

  // 先校验响应状态是否正常
  if (!response.ok) {
    throw new Error('登录请求失败');
  }

  // 现在可以正确获取Authorization头
  const authToken = response.headers.get('Authorization');
  console.log('获取到的令牌:', authToken);

  // 解析响应体数据
  const data = await response.json();
  // 将令牌和响应数据一起返回方便后续使用
  return { data, authToken };
}

验证

完成后端配置和前端代码修正后,重新测试登录接口,就能通过response.headers.get('Authorization')拿到令牌了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:30:49