NSURLConnection/NSURLRequest gzip支持

37

请问NSURLConnection/NSURLRequest是否支持gzip请求?

如果支持,能否提供更多信息?


可能是 Accept-Encoding: gzip on iOS 的重复问题。 - jscs
@JoshCaswell,请检查日期差异。这个问题是在5年后提出的。 - mxg
“重复并不总是指向较晚的日期。”(http://meta.stackexchange.com/a/147651/159251)。我认为其他问题中的答案比这里找到的更有用。 - jscs
https://dev59.com/vp3ha4cB1Zd3GeqPQjEb。请求头中自动添加了`Accept-Encoding: gzip, deflate` [NSURLSession]。 - abhimuralidharan
2个回答

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

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

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

8
  1. 我认为你需要一个NSMutableURLRequest来添加一个头部。
  2. 自"iOS 3.2"作为基本SDK,包含deflate和gzip的accept-encoding头似乎自动包括了(显然以前不是这样)。
- user3850
6
我刚刚做了一些测试,发现 iPhone 默认添加了 gzip 和 deflate。有人知道它是否总是被支持,或者自哪个版本开始,苹果就开始默认包含 Accept-Encoding 了吗? - Dmitry
3
发送到服务器的gzip编码请求怎么处理?https://dev59.com/y1fUa4cB1Zd3GeqPLc13 - ma11hew28
4
服务器将发送一个经过gzip压缩的响应,NSURLConnection会自动解码。 - ax.
1
我如何验证这是否生效? - Jared Egan
显示剩余3条评论

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);

我在bugreport.apple.com上提交了一个请求,希望公开此API或类似的API。 http://openradar.appspot.com/radar?id=4931101243998208 - John
这个问题解决了吗?我需要一种下载流的方式,而不会自动解压缩。 - casolorz
@casolorz 这个 bug 已经在最近的 iOS 版本中修复了,它可以在 iOS8 及更高版本上正常工作。 - liuyuning
@casolorz,您能详细说明一下吗?这里所描述的“bug”是缺少API - 那么哪个API可以填补这个空缺呢?如何控制NSURLSession或请求/响应以使用gzip(或不使用)?如何指示NSURLSession将响应保留为编码格式,并将其作为原样交给您? - Motti Shneor
@MottiShneor,你是不是想问别人这个问题? - casolorz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接