我似乎无法让NSUrlRequest使用gzipped服务器响应......
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"localhost:12345/content"]];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *connectionError) {
NSLog(@"data size: %i", [data length]);
}];
==>数据大小:226854
正如你所看到的,如果我做一个没有Accept-encoding标头的卷曲,我会得到相同的大小:
% curl -s -w \%{size_download} -o /dev/null -H "Content-Type: application/json" -H "Accept: application/json" localhost:12345/content
226854
然而有了gzip的标题,我得到了:
% curl -s -w \%{size_download} -o /dev/null -H "Content-Type: application/json" -H "Accept: application/json" -H "Accept-Encoding: gzip" localhost:12345/content
86304
我做错了什么?如何让我的iOS应用程序正确使用该gzip标头?
答案 0 :(得分:0)
传递给完成处理程序的NSData
是解压缩后的数据,所以你自然会看到更大的数据。
gzip编码用于传输,然后NSURLConnection
解压缩并为您提供数据;压缩数据不会对您有用,因为您只需要自己解压缩。 gzip编码的关键在于它对您的应用程序是透明的,但会减少网络流量。
无法使用NSURLConnection
查看压缩数据。
您可以使用网络捕获工具(如Wireshark)捕获传输并验证是否使用了gzip编码。