首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从给定的NSHTTPURLResponse获取HTTP协议版本?

如何从给定的NSHTTPURLResponse获取HTTP协议版本?
EN

Stack Overflow用户
提问于 2016-09-06 08:06:16
回答 2查看 2.1K关注 0票数 1

NSHTTPURLResponse文档中,我没有找到获得HTTP版本(i.e. "HTTP/1.1" or "HTTP/1.0")的方法。

HTTP标头字段可以通过所有报头字段属性获得,但是HTTP协议版本不会在标头字段中给出,因为它不是HTTP标头。

注意: init,NSHTTPURLResponse初始化器(initWithURL:statusCode:HTTPVersion:headerFields:)确实需要HTTPVersion作为输入,所以理论上它可能已经保存在那里了。

但是,我找不到从给定响应获取HTTPVersion的属性或方法,例如,从NSURLSessionDataTask返回的响应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-06 11:04:35

没有访问NSHTTPURLResponse实例的http版本的公共方式,响应的版本取决于请求版本。

如果您真的想访问http版本,可以使用CFNetworking

代码语言:javascript
复制
CFN_EXPORT CFHTTPMessageRef 
CFHTTPMessageCreateResponse(
  CFAllocatorRef  __nullable alloc,
  CFIndex         statusCode,
  CFStringRef     __nullable statusDescription,
  CFStringRef     httpVersion)              CF_AVAILABLE(10_1, 2_0);

CFHTTPMessageCopyVersion()返回HTTP。

实际上,-[NSHTTPURLResponse initWithURL:(NSURL *)URL statusCode:(NSInteger)statusCode HTTPVersion:(NSString *)version headerFields:(NSDictionary *)fields]使用CFHTTPMessageCreateResponse来创建HTTP响应。请参阅NSURLResponse.m

NSURLResponse是在_CFURLResponse结构上支持的。

代码语言:javascript
复制
typedef struct _CFURLResponse {
    CFRuntimeBase _base;
    CFAbsoluteTime creationTime;
    CFURLRef url;
    CFStringRef mimeType;
    int64_t expectedLength;
    CFStringRef textEncoding;
    CFIndex statusCode;
    CFStringRef httpVersion;
    CFDictionaryRef headerFields;
    Boolean isHTTPResponse;

    OSSpinLock parsedHeadersLock;
    ParsedHeaders* parsedHeaders;
} _CFURLResponse;

typedef const struct _CFURLResponse* CFURLResponseRef;

您可以在一个_CFURLResponse实例上使用NSURLResponse getter方法获得这个结构:

代码语言:javascript
复制
CFTypeRef test = CFBridgingRetain([response performSelector:NSSelectorFromString(@"_CFURLResponse")]);
CFShow(test);
票数 3
EN

Stack Overflow用户

发布于 2019-01-18 07:11:14

请不要使用_CFURLResponse私有API,因为CFNetwork没有提供任何关于其返回值格式的保证。

查询HTTP的推荐方法是实现URLSession:task:didFinishCollectingMetrics:委托方法

https://developer.apple.com/documentation/foundation/nsurlsessiontasktransactionmetrics/1643141-networkprotocolname?language=objc

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39343725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档