37

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

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

4

2 回答 2

67

尽管似乎没有记录但有证据表明NSURLConnection 确实具有透明的 gzip 支持。这意味着如果服务器支持 gzip 编码,并且您的请求有一个Accept-Encoding包含gzip* 的标头,则服务器将发送一个 gzip 响应,该响应NSURLConnection将自动解码。

*NSURLRequest默认情况下可能会添加该标题。如果没有,您必须像这样手动添加它:

 [urlReq setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]
于 2010-04-21T14:49:04.217 回答
3

NSURLRequest将 gzip 解码为NSData; 例如服务器响应包含"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);
于 2013-05-23T03:12:50.127 回答