Restkit加载gzipped json

时间:2012-03-15 13:43:23

标签: gzip restkit

我正在使用RestKit加载带有RKRequest的gzip压缩JSON:

RKRequest* request = [[RKClient sharedClient] requestWithResourcePath:urlString delegate:self];
[request send];

但我收到状态406.当使用AsiHttpRequest一切正常时,响应被解压缩,我可以使用JSON。当我在服务器上关闭gzip时,RKRequest正常工作。

有什么问题?我发现无法告诉RKRequest,响应将被压缩。有任何想法吗?

修改

很奇怪。有时我会

Headers: {
    Connection = "Keep-Alive";
    "Content-Length" = 14;
    "Content-Type" = "text/html; charset=UTF-8";
    Date = "Fri, 16 Mar 2012 13:44:16 GMT";
    "Keep-Alive" = "timeout=2, max=500";
    Server = Apache;
    "X-Powered-By" = "Servlet/2.5 JSP/2.1";
}

有时我得到处理正确的application / gzip。我的问题是为什么我得到“Content-Type”=“text / html; charset = UTF-8”;有时。 并且在Safari中打开的相同请求始终会产生gzip响应。

1 个答案:

答案 0 :(得分:2)

您可以使用HTTP代理(如Charles)发布标题中的内容吗?

您可能需要在后期调用中修改“请求标头”。

确保您的防火墙能够接受POST呼叫。这可能是一个https问题。

修改

您可能需要将服务器配置为始终根据扩展类型将响应作为GZIP和DEFLATE返回。这基于此处(http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/)。

示例:

# compress json format in .htaccess (for apache servers):
AddOutputFilterByType DEFLATE application/json

您可以在此处找到“{mod_deflate”文档(http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

如果您可以发布传出标题,那么它们也很有用,因为它们应该包括:

Accept-Encoding: gzip, deflate

类似问题

修改

确保你也这样做:

[[RKClient sharedClient] setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

或者

[[RKClient sharedClient] setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"];

这应该设置标头的值以接受“gzip”来编码响应。我注意到了这些github问题: