为什么授权 header 在 iOS PATCH 请求中被删除?

Why Authorization header gets removed in iOS PATCH requests?

那里。我遇到了一个非常奇怪的问题。问题是,当我尝试发送 PATCH 请求时,服务器说没有授权 header 包含令牌。 PUT request.Tried 嗅探也是如此,发现根本没有发送 Authorization header。而任何其他类型的请求都包含授权 header。首先想到它的 Alamofire 框架特定问题,但是使用 NSURLConnection 请求和 NSURLSession 任务给了我同样的结果:NO AUTHORIZATION HEADER IS SENT!

这是我用于 Alamofire 的代码:

Alamofire.request(.PATCH, path, parameters: ["email":"new@mail.com"],     encoding: .JSON, headers: ["Authorization":"token \    ((User.sharedUser().token)!)"]).validate().responseJSON { (response) in
            if response.response?.statusCode == 200{
                print("success")
            }else{
                print("Error")
            }
        }

这是带有 NSURLConnection 的代码:

let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
request.HTTPMethod = "PATCH"
request.addValue("\(token)", forHTTPHeaderField: "authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

do{
    let bodyData = try NSJSONSerialization.dataWithJSONObject(["email":"nuv@gmail.com"], options: [])
    request.HTTPBody = bodyData
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
    {
        (response, data, error) in
        if let mdata = data {
            let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
            print(contents)
        } else {
            print(error?.localizedDescription)
        }
        }
}catch{
    print("failed serialization")
}

IIRC,Authorization header 是 NSURLSession 为自己的目的保留的那些 header 之一,并且可能会用自己的值覆盖——特别是如果您发送的东西看起来像普通的 HTTP 身份验证。

你能发一个 X-Authorization header 吗?

正在寻找 Alamofire 5(AF 5) 解决方案的任何人,这里是解决方案:

let headers: [String:String] = [...]
let params: [String: Any] = [...]
let url = URL(...)
let redirector = Redirector(behavior: Redirector.Behavior.modify({ (task, urlRequest, resp) in
  var urlRequest = urlRequest
  headers.forEach { header in
    urlRequest.addValue(header.value, forHTTPHeaderField: header.key)
  }
  return urlRequest
  }))
  //use desired request func of alamofire and your desired enconding
  AF.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
            .responseJSON { response in
                //handleDataResponse...
            }.redirect(using: redirector)