实际上,该-[NSHTTPURLResponse allHeaderFields]方法返回一个不区分大小写的 NSDictionary 实例。_CFCapitalizeHeader这与CFNetwork 最新版本中删除的功能无关。不幸的是,它的源代码不再可用。
这是该allHeaderFields方法的简化调用图(OS X 10.8.3)
-[NSHTTPURLResponse allHeaderFields] -- Foundation
CFHTTPMessageCopyAllHeaderFields() -- CFNetwork
HTTPMessage::copyAllHeaderFields(__CFArray const**)
MixedDict::copyAsOrdinaryDict(__CFAllocator const*, __CFArray const**) const
CFDictionaryCreateMutable()
该字典最终作为allHeaderFields方法的结果返回。这是传递给的第三个参数CFDictionaryCreateMutable的样子:
version = 0
retain = _keyRetain(__CFAllocator const*, void const*) // __ZL10_keyRetainPK13__CFAllocatorPKv
release = _keyRelease(__CFAllocator const*, void const*) // __ZL11_keyReleasePK13__CFAllocatorPKv
copyDescription = _keyCopyDescription(void const*) // __ZL19_keyCopyDescriptionPKv
equal = _keyEqual(void const*, void const*) // __ZL9_keyEqualPKvS0_
hash = _keyHash(void const*) // __ZL8_keyHashPKv
_keyEqualC++ 方法最终CFStringCompare使用该选项kCFCompareCaseInsensitive调用。
这就是为什么不关心 NSHTTPURLResponse 标头是否区分大小写的原因。
但是,非常不幸的是,这种行为没有记录在案。请欺骗雷达#13715902要求提供文件。