NSURLConnection / NSURLRequest gzip支持

问题描述 投票:34回答:2

有谁知道NSURLConnection / NSURLRequest是否支持gzip请求。

如果有,您能提供更多信息吗?

cocoa cocoa-touch gzip nsurlconnection nsurlrequest
2个回答
63
投票

虽然它does not seem to be documentedthere is evidence认为NSURLConnection确实有透明的gzip支持。意思是如果服务器支持gzip编码,并且你的请求有一个包含Accept-Encoding *的gzip头,服务器将发送一个gzip压缩响应,NSURLConnection会自动解码。

* NSURLRequest可能会默认添加该标头。如果没有,你必须手动添加它,如下所示:

 [urlReq setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]

2
投票

NSURLRequest将gzip解码为NSData;例如Server响应包含"Content-Encoding" = gzip; NSData将解码。如果您不想自动解码,请添加代码。这是一个私有API。

//import CFNetwork.framework
extern CFStringRef kCFURLRequestDoNotDecodeData;
typedef const struct _CFURLRequest* CFURLRequestRef;
extern void _CFURLRequestSetProtocolProperty(CFURLRequestRef,CFStringRef,CFTypeRef);

//NSURLRequest init ...
//...
CFURLRequestRef requestRef = (CFURLRequestRef)[request performSelector:@selector(_CFURLRequest)];
_CFURLRequestSetProtocolProperty(requestRef,kCFURLRequestDoNotDecodeData,kCFBooleanTrue);
© www.soinside.com 2019 - 2024. All rights reserved.