Swift 查找键时,allHeaderFields不区分大小写
我正在使用Alamofire进行API调用 根据我使用的服务器,响应头可以大写 但正如所有HeaderFields的文档所述: var allHeaderFields:[AnyHashable:Any]{get} 包含作为服务器响应一部分接收的所有HTTP头字段的字典。通过检查此字典,客户端可以看到HTTP服务器返回的“原始”头信息 此字典中的键是从服务器接收的标题字段名。有关常用HTTP头字段的列表,请参见RFC 2616 HTTP头不区分大小写。为了简化代码,某些标题字段名被规范化为其标准形式。例如,如果服务器发送内容长度头,它将自动调整为内容长度 返回的头字典在set操作期间被配置为保留大小写(除非该键已经存在且大小写不同),并且在查找键时不区分大小写 例如,如果设置标题X-foo,然后再设置标题X-foo,则字典的键将是X-foo,但值将取自X-foo标题 但在我的代码中,如果我这样做:Swift 查找键时,allHeaderFields不区分大小写,swift,header,alamofire,Swift,Header,Alamofire,我正在使用Alamofire进行API调用 根据我使用的服务器,响应头可以大写 但正如所有HeaderFields的文档所述: var allHeaderFields:[AnyHashable:Any]{get} 包含作为服务器响应一部分接收的所有HTTP头字段的字典。通过检查此字典,客户端可以看到HTTP服务器返回的“原始”头信息 此字典中的键是从服务器接收的标题字段名。有关常用HTTP头字段的列表,请参见RFC 2616 HTTP头不区分大小写。为了简化代码,某些标题字段名被规范化为其标准形
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,它尚未修复。