如果Tomcat7服务器压缩了GZIP,Android客户端将如何?

时间:2012-07-12 18:27:21

标签: android tomcat compression gzip tomcat7

这来自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);
}

现在来自{+ 3}}的HTTP连接器

压缩

  

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

compressionMinSize

  

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

这意味着当压缩设置为on时。如果数据大于2084,则仅压缩数据。

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

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

我的问题

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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