为什么在iOS PATCH请求中删除了Authorization标头?

时间:2016-09-15 12:29:59

标签: ios swift nsurlconnection alamofire

那里。我有一个非常奇怪的问题。问题在于,当我尝试发送PATCH请求服务器时,没有授权标头包含令牌。对于PUT请求也一样。想要嗅探并发现根本没有发送任何Authorization标头。而任何其他类型的请求都包含授权标头。首先想到了它的Alamofire框架特定问题,但是使用NSURLConnection请求和NSURLSession任务给了我相同的内容:没有授权标题就是SENT!

以下是我用于Alamofire的代码:

angular.element(window).on("load resize scroll", function() {
 updateHeight();
});

function updateHeight(){

  $timeout(function(){
    var canvasHeight = angular.element('#chartCanvas').height();
    table_height(canvasHeight);
  });
}

// updateHeight on load
updateHeight();

以下是NSURLConnection的代码:

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")
            }
        }

2 个答案:

答案 0 :(得分:3)

IIRC,Authorization标题是NSURLSession为其自身目的保留的标题之一,并且可能会用自己的值覆盖 - 特别是如果您发送的内容看起来像正常HTTP身份验证。

您可以发送X-Authorization标题吗?

答案 1 :(得分:2)

任何正在寻找 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)