为什么授权 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)
那里。我遇到了一个非常奇怪的问题。问题是,当我尝试发送 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)