从我读过的所有gzip响应数据应该由NS URL加载系统自动解压缩。我正在使用AFNetworking和AFJSONResponseSerializer来处理对自定义后端的请求。我已尝试将"Accept-Encoding" = gzip
添加到我的请求标头中,但它没有任何效果。我的回复标题包括:
"Content-Encoding" = gzip;
"Content-Length" = 179837;
"Content-Type" = "application/json";
我正在提出这样的请求:
[[AFHTTPRequestOperationManager sharedClient]
GET:@"some/endpoint"
parameters:@{@"foo":@"bar"}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Response data size %u", operation.responseData.length);
NSURL *outputURL = [[APP_DELEGATE applicationDocumentsDirectory] URLByAppendingPathComponent:@"data.gzip"];
[operation.responseData writeToURL:outputURL atomically:NO];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR [%d] [%@]", error.code, error.localizedDescription );
}];
当运行时,operation.responseData.length
打印的大小是我所期望的。但是,当它应该是NSArray时,responseObject
是零。我添加了写operation.responseData
的行来测试收到的数据是否符合我的预期。我可以浏览data.gzip,解压缩它,看看我的JSON。
在我看来,在我的AFJSONResponseSerializer尝试处理之前,收到的压缩数据没有被自动解压缩。我在Stackoverflow上发现的大部分内容都讨论了解压缩的自动方式或建议添加"Accept-Encoding" = gzip
标头。任何建议将不胜感激。
答案 0 :(得分:0)
您是否检查了“自定义后端”的输出 - 使用类似Charles Proxy的内容,可以让您看到响应标头和原始内容等内容。
e.g。 Charles中显示的典型标题:
HTTP/1.1 200 OK
Date Wed, 26 Nov 2014 22:25:33 GMT
Server Apache/2.2.24 (Unix) mod_hive/4.0 mod_ssl/2.2.24 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_fcgid/2.3.6
X-Powered-By PHP/5.3.29
P3P CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Cache-Control no-cache
Pragma no-cache
Set-Cookie 4d3750fca133ae462ca26ca5a1cc0104=c7da991b30f53342846fff5ddaf3ea08; path=/
Cache-Control max-age=3600
Expires Wed, 26 Nov 2014 23:25:33 GMT
Host-Header 192fc2e7e50945beb8231a492d6a8024
Keep-Alive timeout=5, max=100
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/html; charset=utf-8