【问题标题】:Restkit loading gzipped jsonRestkit加载gzip压缩的json
【发布时间】:2012-03-15 13:43:23
【问题描述】:

我正在使用 RestKit 通过 RKRequest 加载压缩后的 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 响应。

【问题讨论】:

    标签: gzip restkit


    【解决方案1】:

    您能否使用 HTTP 代理(如 Charles)发布您的标头中的内容?

    您可能需要在 post call 中修改您的“请求标头”。

    确保您的防火墙能够接受 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 问题:

    【讨论】:

    • 你控制服务器端代码吗?我发现了另一个相关的问题。 “text/html” Content-Type 很奇怪。
    • 是的,我也可以控制服务器端。从浏览器调用请求会返回一个 gzip 响应。
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2015-07-14
    • 2023-02-06
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多