为什么在iOS PATCH请求中删除授权标头?

问题描述:

那里。我有一个很奇怪的问题。事情是,当我试图发送PATCH请求服务器说没有授权标头包含令牌。对PUT请求也是一样的。尝试嗅探并发现根本没有发送授权标头。而任何其他类型的请求都包含授权标头。首先想到它的Alamofire框架特定的问题,但使用NSURLConnection请求和NSURLSession任务给了我相同的:没有授权标题发送!为什么在iOS PATCH请求中删除授权标头?

下面是用我的代码Alamofire:

Alamofire.request(.PATCH, path, parameters: ["email":"[email protected]"],  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":"[email protected]"], 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头是那些头一个NSURLSession储量为己用,并可能用自己的值覆盖 - 特别是如果你发送的东西看起来像普通的HTTP认证。

您能发送一个X-Authorization标题吗?

+0

感谢您的回复)是的,我可以使用任何其他标题,但为什么没有记录?为什么它开始只为PUT和PATCH请求使用授权标头?它完全删除授权标题,而不是使用它(嗅探流量)。谢谢) –

+0

它实际上被记录。在https://developer.apple.com/reference/foundation/nsmutableurlrequest?language=objc搜索“保留的HTTP头”,您就可以找到它。 – dgatwood

+0

这是您可以随时逃避的事情之一,因此会导致错误的安全感。然后当你发送的东西看起来像基本身份验证或其他任何东西时,它突然间就会消失。这可能是值得提出一个错误,要求委托方法让你更直接地控制该头域。 – dgatwood