使用gzip编码的NSMutableURLRequest不起作用

时间:2016-07-09 23:34:29

标签: ios nsurlsession nsurl nsurlrequest

我似乎无法让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标头?

1 个答案:

答案 0 :(得分:0)

传递给完成处理程序的NSData是解压缩后的数据,所以你自然会看到更大的数据。

gzip编码用于传输,然后NSURLConnection解压缩并为您提供数据;压缩数据不会对您有用,因为您只需要自己解压缩。 gzip编码的关键在于它对您的应用程序是透明的,但会减少网络流量。

无法使用NSURLConnection查看压缩数据。

您可以使用网络捕获工具(如Wireshark)捕获传输并验证是否使用了gzip编码。