Swift 查找键时,allHeaderFields不区分大小写

Swift 查找键时,allHeaderFields不区分大小写,swift,header,alamofire,Swift,Header,Alamofire,我正在使用Alamofire进行API调用 根据我使用的服务器,响应头可以大写 但正如所有HeaderFields的文档所述: var allHeaderFields:[AnyHashable:Any]{get} 包含作为服务器响应一部分接收的所有HTTP头字段的字典。通过检查此字典,客户端可以看到HTTP服务器返回的“原始”头信息 此字典中的键是从服务器接收的标题字段名。有关常用HTTP头字段的列表,请参见RFC 2616 HTTP头不区分大小写。为了简化代码,某些标题字段名被规范化为其标准形

我正在使用Alamofire进行API调用

根据我使用的服务器,响应头可以大写

但正如所有HeaderFields的文档所述:

var allHeaderFields:[AnyHashable:Any]{get}

包含作为服务器响应一部分接收的所有HTTP头字段的字典。通过检查此字典,客户端可以看到HTTP服务器返回的“原始”头信息

此字典中的键是从服务器接收的标题字段名。有关常用HTTP头字段的列表,请参见RFC 2616

HTTP头不区分大小写。为了简化代码,某些标题字段名被规范化为其标准形式。例如,如果服务器发送内容长度头,它将自动调整为内容长度

返回的头字典在set操作期间被配置为保留大小写(除非该键已经存在且大小写不同),并且在查找键时不区分大小写

例如,如果设置标题X-foo,然后再设置标题X-foo,则字典的键将是X-foo,但值将取自X-foo标题

但在我的代码中,如果我这样做:

if let headers = response.response?.allHeaderFields {
   print("Access-Token: \(response.response?.allHeaderFields["Access-Token"])")
   print("access-token: \(response.response?.allHeaderFields["access-token"])")
   print("access-token: \(response.response?.allHeaderFields["Access-token"])")
}
在控制台里我有

Access-Token: nil
access-token: Optional(jdRtDzKHNs_i-jt3Lh3a3A)
access-token: nil

我遗漏了什么吗?

该错误与Alamofire无关。这是一只敏捷的虫子

不幸的是,这是一个已知的错误,当Swift 3将标题转换为字典时出现了这个错误。该漏洞自2016年注册,至今仍未解决。更糟糕的是,他们甚至没有修改Swift文件

这违反了HTTP规范,我不知道为什么他们只将其标记为中等优先级。看来他们不在乎,也永远解决不了这个问题


谢谢你的回答,并指出这是非常不幸的。确实如此。:/截至Swift 4.2,它尚未修复。