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

URLSession丢失Authorization请求头致接口500错误求助

解决URLSession重定向时丢失Authorization头的问题

这是个典型的URLSession安全机制导致的问题——默认情况下,URLSession在处理HTTP重定向时会自动移除Authorization这类敏感请求头,不管重定向的目标是同域名还是跨域名,这就是为什么你手动在重定向回调里重新添加头后请求就正常了。

为什么会这样?

苹果设计这个行为是为了安全:如果你的请求被重定向到一个第三方域名,携带授权头可能会导致令牌泄露,所以默认会把这类敏感头从新请求中移除。而你的新接口大概率是触发了重定向(比如返回3xx状态码),原请求的Authorization: Token xxxx头没被带到重定向请求里,后端因为拿不到令牌验证失败,最终返回500错误。

解决方案:手动在重定向回调中添加授权头

你已经找对了方向,这里给出更完整的实现示例,确保覆盖所有情况:

Objective-C 实现

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)newRequest completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler {
    // 1. 获取原请求的Authorization头
    NSString *authHeader = task.currentRequest.allHTTPHeaderFields[@"Authorization"];
    
    // 2. 如果原请求有授权头,就添加到重定向的新请求中
    if (authHeader) {
        NSMutableURLRequest *modifiedRequest = [newRequest mutableCopy];
        [modifiedRequest setValue:authHeader forHTTPHeaderField:@"Authorization"];
        // 调用completionHandler,传入修改后的请求
        completionHandler(modifiedRequest);
    } else {
        // 没有授权头的话,直接使用原重定向请求
        completionHandler(newRequest);
    }
}

Swift 实现(参考)

func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
    guard let authHeader = task.currentRequest?.allHTTPHeaderFields?["Authorization"] else {
        completionHandler(request)
        return
    }
    
    var modifiedRequest = request
    modifiedRequest.setValue(authHeader, forHTTPHeaderField: "Authorization")
    completionHandler(modifiedRequest)
}

额外注意事项

  • 安全验证:如果重定向的目标是跨域名,一定要确认这个域名是你信任的服务,避免把Token泄露给不可信的第三方。
  • 检查接口重定向逻辑:可以和同事确认新接口是否有必要的重定向,能不能直接调整接口逻辑避免重定向,从根源上解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:54