带有 gzip 编码的 NSMutableURLRequest 不起作用
NSMutableURLRequest with gzip encoding not working
我似乎无法让 NSUrlRequest 使用压缩的服务器响应...
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 header 的卷曲,我得到相同的尺寸:
% curl -s -w \%{size_download} -o /dev/null -H "Content-Type: application/json" -H "Accept: application/json" localhost:12345/content
226854
然而,使用 gzip 的 header,我得到:
% 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 header?
传给你的completion handler的NSData
是解压后的数据,所以你自然会看到更大的尺寸。
gzip 编码用于传输,然后 NSURLConnection
解压缩并提供数据;压缩后的数据对您没有多大用处,因为您只需要自己解压缩即可。 gzip 编码的要点是它对您的应用程序是透明的,但可以减少网络流量。
无法使用 NSURLConnection
查看压缩数据。
您可以使用 Wireshark 等网络捕获工具来捕获传输并验证是否使用了 gzip 编码。
我似乎无法让 NSUrlRequest 使用压缩的服务器响应...
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 header 的卷曲,我得到相同的尺寸:
% curl -s -w \%{size_download} -o /dev/null -H "Content-Type: application/json" -H "Accept: application/json" localhost:12345/content
226854
然而,使用 gzip 的 header,我得到:
% 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 header?
传给你的completion handler的NSData
是解压后的数据,所以你自然会看到更大的尺寸。
gzip 编码用于传输,然后 NSURLConnection
解压缩并提供数据;压缩后的数据对您没有多大用处,因为您只需要自己解压缩即可。 gzip 编码的要点是它对您的应用程序是透明的,但可以减少网络流量。
无法使用 NSURLConnection
查看压缩数据。
您可以使用 Wireshark 等网络捕获工具来捕获传输并验证是否使用了 gzip 编码。