2016-09-15 55 views
1

那裏。我有一個很奇怪的問題。事情是,當我試圖發送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") 
} 

回答

2

IIRC,該Authorization頭是那些頭一個NSURLSession儲量爲己用,並可能用自己的值覆蓋 - 特別是如果你發送的東西看起來像普通的HTTP認證。

您能發送一個X-Authorization標題嗎?

+0

感謝您的回覆)是的,我可以使用任何其他標題,但爲什麼沒有記錄?爲什麼它開始只爲PUT和PATCH請求使用授權標頭?它完全刪除授權標題,而不是使用它(嗅探流量)。謝謝) –

+0

它實際上被記錄。在https://developer.apple.com/reference/foundation/nsmutableurlrequest?language=objc搜索「保留的HTTP頭」,您就可以找到它。 – dgatwood

+0

這是您可以隨時逃避的事情之一,因此會導致錯誤的安全感。然後當你發送的東西看起來像基本身份驗證或其他任何東西時,它突然間就會消失。這可能是值得提出一個錯誤,要求委託方法讓你更直接地控制該頭域。 – dgatwood