この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。きんくまです。
今回はタイトルの通りでして、
「URLRequestのheaderに小文字のauthorizationを設定しても大文字に置き換えられてしまう」です。
検証コード
HTTPヘッダーに小文字からはじまるauthorizationと、適当なx-custom-keyというのを設定します。
private func makeRequest() -> AnyPublisher<[Todo], Error>? {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/todos/") else {
return nil
}
var req = URLRequest(url: url)
req.addValue("abcdefg", forHTTPHeaderField: "authorization")
req.addValue("12345", forHTTPHeaderField: "x-custom-key")
if let header = req.allHTTPHeaderFields {
print("\(header)") //=> 出力
}
return URLSession.shared.dataTaskPublisher(for: req)
.tryMap { (data, response) -> Data in
guard let httpRes = response as? HTTPURLResponse,
200 ..< 300 ~= httpRes.statusCode else {
throw TodoError.invalidHttpStatusCode
}
return data
}
.decode(type: [Todo].self, decoder: JSONDecoder())
.eraseToAnyPublisher()
}
出力です。小文字設定のauthorizationは大文字始まりのAuthorizationに変更されるが、
x-custom-keyの方はそのままになっていることが確認できます。
["x-custom-key": "12345", "Authorization": "abcdefg"]
対応方法
いろいろ探したのですがなさそうです、、。残念
経緯
HTTP/2だと小文字のみ受け付けるという制限があり、Alamofireで小文字始まりでHTTPヘッダーを設定したところ、サーバーにはじかれましたw
参考
HTTP/1.x⇒HTTP/2 仕様変更で困ったこと (利用暗号の制約・httpヘッダーの小文字化)
Alamofireで何かやっているのかな?と思ったのですが、URLRequestがやってました。OSレベルでやっていたらどうしようもないですね。
How to send apikey
in header in Alamofire 4.5,Swift 4?
ではでは