2016-09-15 3 views
1

есть. У меня очень странная проблема. Дело в том, что когда я пытаюсь отправить запросы PATCH, сервер говорит, что ни один заголовок авторизации не содержит токен. То же самое для запроса PUT. Попробовал обнюхать и выяснил, что ни один заголовок авторизации не отправляется вообще. Хотя любые другие типы запросов содержат заголовок авторизации. Сначала подумал о своей специфической проблеме структуры Alamofire, но с использованием запросов NSURLConnection и задач NSURLSession дал мне то же самое: NO AUTHORIZATION HEADER SENT!Почему заголовок авторизации удаляется в 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? И он полностью удаляет заголовок авторизации, а не использует его (sniffed traffic). Спасибо) –

+0

На самом деле это задокументировано. Найдите «Зарезервированные заголовки HTTP» на странице https://developer.apple.com/reference/foundation/nsmutableurlrequest?language=objc, и вы его найдете. – dgatwood

+0

Это одна из тех вещей, где вы иногда можете уйти от нее, так что это приводит к ложному чувству безопасности. И тогда, когда вы отправляете что-то, что выглядит слишком похоже на базовый auth или что-то еще, он внезапно начинает топать. Возможно, стоит указать ошибку, чтобы попросить метод делегата позволить вам контролировать это поле заголовка более непосредственно. – dgatwood

Смежные вопросы