我的应用程序使用自定义NSURLProtocol
子类。我需要用我的副本替换NSHTTPURLResponse
,修改一些标题字段。所以,我创建了新的NSHTTPURLResponse
实例,如下所示:
@implementation NSHTTPURLResponse (CocoaFix)
- (instancetype)HTTPResponseByRemovingValueForHeaderFields:(NSArray *)fields {
NSMutableDictionary *mutableHeaderFields = [self.allHeaderFields mutableCopy];
[mutableHeaderFields removeObjectsForKeys:fields];
return [[[self class] alloc] initWithURL:self.URL
statusCode:self.statusCode
HTTPVersion:@"HTTP/1.1" // What should I pass here?
headerFields:mutableHeaderFields];
}
@end
HTTPVersion
参数出现问题。我没有找到任何方法从原始回复中获取此值。
文档说:
这通常表示为“HTTP / 1.1”。
但提供硬编码值看起来不是一个解决方案,它将始终正常工作。
请帮帮我。
答案 0 :(得分:0)
根据这个答案:NSURLRequest http protocol version,你可能至少需要与CFNetwork API联系才能做到这一点。
答案 1 :(得分:0)
根据CFNetwork团队的说法,至少在一年前,没有实用的方法来获取这些信息。事实上,通过查看标题的运行时分析,我怀疑它甚至已经存储了。
如果我是对的,那么从那时起它对网络堆栈的行为也没有影响,所以你可以说它是“HTTP / 999.99”并且没关系。
答案 2 :(得分:0)
NSURLSessionTaskTransactionMetrics
类具有名为networkProtocolName
的属性。
该类实例是数组的元素之一,该数组也是一个名为transactionMetrics
的属性,它是NSURLSessionTaskMetrics
的成员,该metrics
是名为{{ 1}}是..didFinishCollectingMetrics:..
协议的一部分。
例如:
NSURLSessionTaskDelegate