提供HTTPVersion到NSHTTPURLResponse

时间:2016-03-23 12:36:25

标签: objective-c nsurlprotocol nshttpurlresponse

我的应用程序使用自定义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”。

但提供硬编码值看起来不是一个解决方案,它将始终正常工作。

请帮帮我。

3 个答案:

答案 0 :(得分:0)

根据这个答案:NSURLRequest http protocol version,你可能至少需要与CFNetwork API联系才能做到这一点。

答案 1 :(得分:0)

根据CFNetwork团队的说法,至少在一年前,没有实用的方法来获取这些信息。事实上,通过查看标题的运行时分析,我怀疑它甚至已经存储了。

如果我是对的,那么从那时起它对网络堆栈的行为也没有影响,所以你可以说它是“HTTP / 999.99”并且没关系。

答案 2 :(得分:0)

NSURLSessionTaskTransactionMetrics类具有名为networkProtocolName的属性。 该类实例是数组的元素之一,该数组也是一个名为transactionMetrics的属性,它是NSURLSessionTaskMetrics的成员,该metrics是名为{{ 1}}是..didFinishCollectingMetrics:..协议的一部分。

例如:

NSURLSessionTaskDelegate