Swift Alamofire特定请求无法携带Bearer Authorization头问题
请求构造代码
AF.request( baseURL.appendingPathComponent(path), method: method, parameters: parameters, encoding: encoding, headers: .init([.authorization(bearerToken: token)]), interceptor: nil, requestModifier: nil )
测试的请求路径
"/api/v1/languages""/api/v1/speak""/api/v1/courses/\(id)"(id为Int类型)"/api/v1/courses/1"
核心问题
前两个请求能正常携带Authorization头,但后两个请求不行。后两个请求的originalRequest包含Authorization头,但currentRequest中该头丢失。
调试代码
print("debug1", request?.lastTask?.currentRequest, request?.lastTask?.currentRequest?.headers) print("debug2", request?.lastTask?.originalRequest, request?.lastTask?.originalRequest?.headers)
调试结果
- 仅前两个请求的
currentRequest包含Authorization头 - 所有请求的
originalRequest均包含Authorization头
额外测试路径及结果
"/api/v1/70":存在Authorization头"/api/v1/courses/70":无Authorization头"/api/v1/courses/courses/70":存在Authorization头"/api/v1/episodes/70":无Authorization头"/api/v1/episodes/episodes/70":存在Authorization头
可能原因及解决建议
- 检查全局拦截器/配置:即使当前请求传了
interceptor: nil,也可能项目中配置了全局的请求拦截器,在特定路径下移除了Authorization头,排查全局的Alamofire配置代码。 - 强制在requestModifier中添加头:绕过内部可能的修改逻辑,手动在请求修改器中添加Authorization头:
requestModifier: { urlRequest in urlRequest.headers.add(.authorization(bearerToken: token)) }
- 排查重定向问题:Alamofire默认不会在重定向请求中携带Authorization头,检查是否这些异常请求返回了3xx重定向状态码;若需要携带,需配置重定向策略,自定义处理重定向时的请求头。
- 排除Alamofire问题:用原生URLSession构造相同路径的请求测试,看是否同样丢失请求头,以此确认问题是否出自Alamofire的处理逻辑。
内容的提问来源于stack exchange,提问作者Andrei Krotov
相关产品推荐
相关产品推荐

