自动解压缩gzip json响应数据不起作用

时间:2014-11-25 00:27:11

标签: ios afnetworking

从我读过的所有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标头。任何建议将不胜感激。

1 个答案:

答案 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