簡體   English   中英

向 NSHTTPURLResponse 提供 HTTPVersion

[英]Provide HTTPVersion to 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”。

但是提供硬編碼值看起來不是一個解決方案,它會一直正常工作。

請幫我解決這個問題。

根據這個答案: NSURLRequest http 協議版本,您可能至少需要橋接到 CFNetwork API 才能做到這一點。

根據 CFNetwork 團隊的說法,至少在一年前,還沒有獲得該信息的實用方法。 事實上,從頭文件的運行時分析來看,我懷疑它是否已經被存儲了。

如果我是對的,那么從那時起它對網絡堆棧的行為也沒有影響,所以你可以說它是“HTTP/999.99”,這無關緊要。

NSURLSessionTaskTransactionMetrics類具有名為networkProtocolName屬性。 這個類實例是數組的元素之一,它也是一個名為transactionMetrics的屬性,它是NSURLSessionTaskMetrics成員,它是名為..didFinishCollectingMetrics:..的回調方法中名為metrics輸入參數,它是NSURLSessionTaskDelegate協議的一部分。

例如:

- (void)URLSession:(NSURLSession *)session
              task:(NSURLSessionTask *)task
didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) {
    self.redirectCount = metrics.redirectCount;
    self.networkProtocolName = metrics.transactionMetrics.lastObject.networkProtocolName;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM