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

AFNetworking设置网络请求Authorization Header不生效问题求解

问题原因及解决方案

常见原因

  • 重定向自动丢弃Authorization头:如果你的请求触发了301/302等重定向逻辑,NSURLSession默认会在重定向后的新请求中移除自定义的Authorization头,这是系统层面的安全策略,是该问题最高发的原因。
  • Token值为空:设置Header时Token变量为nil,会导致整个Authorization头的值不合法,AFNetworking可能会直接忽略该无效Header。
  • CORS预检请求限制:如果接口存在跨域场景,系统会先发送OPTIONS预检请求,若服务器返回的响应头Access-Control-Allow-Headers未包含Authorization,实际GET请求会自动移除该头。
  • requestSerializer被覆盖:若后续代码或全局配置修改了manager的requestSerializer属性,之前设置的Header会失效。
  • 抓包工具误判:如果是通过代理工具抓包验证,未正确配置HTTPS根证书的情况下,可能无法正确解析加密请求头,误判为没有携带Authorization。

对应解决方法

  1. 手动处理重定向逻辑,实现NSURLSession的重定向代理方法,在重定向时重新添加Authorization头:
// 先设置session代理
manager.session.delegate = self;

// 实现重定向代理方法
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler {
    NSMutableURLRequest *mutableRequest = [request mutableCopy];
    // 重新添加Authorization头
    [mutableRequest setValue:[NSString stringWithFormat:@"Bearer %@",Token] forHTTPHeaderField:@"Authorization"];
    completionHandler(mutableRequest);
}
  1. 加断点确认设置Header时Token已经完成赋值,不为空,也可以打印manager.requestSerializer.HTTPRequestHeaders确认头是否已经被正确存入序列化器。
  2. 确认服务器CORS配置已允许Authorization头,非跨域场景可忽略该点。
  3. 保证设置Header的代码执行后,没有其他逻辑修改manager的requestSerializer属性,也可以直接使用AFN提供的专属属性设置认证头,写法更规范:
requestSerializer.authorizationHeaderField = [NSString stringWithFormat:@"Bearer %@", Token];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:04