2012-03-15 97 views
1

我使用RestKit加载与RKRequest gzip压缩JSON:Restkit装载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"; 
} 

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

回答

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 

您可以在这里找到(http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

的 'mod_deflate模块' 的文档如果您可以张贴输出头,这也将是有益的,因为它们应当包括:

Accept-Encoding: gzip, deflate 

类似问题

编辑:

确保你也这样做:

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

或本

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

这应该设置你的头的值,以接受“压缩”编码的响应。我注意到这些问题的GitHub:

+0

嗨 - 我editet我张贴以上 – netshark1000 2012-03-17 20:32:47

+0

你控制服务器端代码?我发现了另一个相关的问题。 “text/html”Content-Type很奇怪。 – 2012-03-17 21:07:58

+0

是的,我也可以控制服务器端。从浏览器调用请求将返回gzip响应。 – netshark1000 2012-03-18 06:55:29