我正在使用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响应。
答案 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问题: