转换到 Swift 3 时,我注意到一个奇怪的错误发生在从 HTTPURLResponse 读取 header 字段时。
let id = httpResponse.allHeaderFields["eTag"] as? String
不再有效。
我打印了所有标题字典,我所有的标题键似乎都是句子大小写。
根据 Charles 代理,我所有的标题都是小写的。根据后端团队的说法,在他们的代码中, header 采用 Title-Case 格式。根据文档:标题应该不区分大小写。
所以我不知道该相信哪个。还有其他人在 Swift 3 中发现他们的 header 现在被 iOS 变成了 Sentence case 吗?如果是这样,这是我们想要的行为吗?
我应该用 Apple 记录错误,还是应该在 HTTPURLResponse 上创建一个类别,让我自己不区分大小写地找到 header 值。
最佳答案
更新:这是一个 known issue 。
allHeaderFields 应该返回一个不区分大小写的字典,因为这是 HTTP 规范所要求的。看起来像 Swift 错误,我会在 上提交雷达或错误报告。
下面是一些简单重现问题的示例代码:
let headerFields = ["ETag" : "12345678"]
let url = URL(string: "http://www.example.com")!
let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: "HTTP/1.1", headerFields: headerFields)!
response.allHeaderFields["eTaG"] // nil (incorrect)
headerFields["eTaG"] // nil (correct)
(改编自 this Gist from Cédric Luthi 。)
关于ios - HTTPURLResponse allHeaderFields Swift 3 大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152483/