【问题标题】:How will an Android Client if Tomcat7 server has GZIP compressed?如果 Tomcat7 服务器已压缩 GZIP,Android 客户端将如何?
【发布时间】:2012-07-12 18:27:21
【问题描述】:

这是来自Answer on SO

至于 GZIP 压缩,你不应该自己做。让服务器自行处理。

修复您的代码以删除所有压缩响应的手动尝试,它最终应该基本上如下所示:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String json = createItSomehow();
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

下面是来自Apache Tomcat 7 configuration page 的 HTTP 连接器

压缩

连接器可能会使用 HTTP/1.1 GZIP 压缩来尝试保存 服务器带宽。参数的可接受值为“off” (禁用压缩),“on”(允许压缩,这会导致文本数据 被压缩),“力”(在所有情况下强制压缩),或 数字整数值(相当于“on”,但指定 输出压缩前的最小数据量)。如果 内容长度未知且压缩设置为“开”或更多 激进的,输出也会被压缩。如果没有指定,这个 属性设置为“关闭”。

compressionMinSize

如果压缩设置为“开”,则此属性可用于 指定压缩输出之前的最小数据量。如果 未指定,此属性默认为“2048”

这意味着当压缩设置为打开时。只有大于2084的数据才会被压缩。

在我的 Android 客户端中,我使用以下代码来查找数据是否经过 gzip 压缩

if ( entity.getContentEncoding() != null && "gzip".equalsIgnoreCase(entity.getContentEncoding().getValue())

我的问题

Server在压缩数据时是否也设置了entity.getContentEncoding().getValue()的值?

【问题讨论】:

    标签: android tomcat compression gzip tomcat7


    【解决方案1】:

    服务器对您的 android 应用程序中的任何 entity 一无所知。如果 gzip 正在使用,Tomcat 的连接器将适当地设置 Content-Encoding 响应标头。

    另外,您的代码比它需要的更复杂。你可以这样做:

    if ( "gzip".equalsIgnoreCase(entity.getContentEncoding().getValue())
    

    ...因为没有 NPE 的机会。

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 2012-07-10
      • 2015-01-19
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多