2014-11-25 86 views
0

從我所有讀過的gzip壓縮響應數據應該由NS URL加載系統自動解壓縮。我正在使用AFNetworking和AFJSONResponseSerializer處理對自定義後端的請求。我已經嘗試將"Accept-Encoding" = gzip添加到我的請求標題中,但它沒有效果。我的響應頭包括:自動解壓縮json響應數據不起作用

"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打印尺寸爲我所期望的。但是,responseObject應該是NSArray時爲零。我添加了編寫operation.responseData的行來測試收到的數據是我所期望的。我可以瀏覽到data.gzip,解壓縮並查看我的JSON。

在我看來,在我的AFJSONResponseSerializer嘗試處理它之前,收到的壓縮數據沒有被自動解壓縮。我在Stackoverflow上找到的大部分內容都討論瞭解壓縮是自動還是建議添加一個"Accept-Encoding" = gzip標頭。任何建議,將不勝感激。

回答

0

您是否檢查過「自定義後端」的輸出 - 使用類似Charles Proxy的內容,這樣可以讓您看到諸如響應標題和原始內容之類的內容。

例如如查爾斯所示的典型標題:

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