如何将一个Android客户端,如果Tomcat7服务器gzip压缩的?(How will an A

2019-10-31 21:50发布

这是从上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的配置页面的HTTP连接器

压缩

连接器可以在试图节省服务器的带宽使用HTTP / 1.1 GZIP压缩。 该参数的可接受的值是“开”(允许压缩,这导致要压缩的文本数据)“关”(禁用压缩),“力”(力在所有情况下压缩),或一个数字整数值(这是相当于“上”,但是指定了输出前的数据的最小量被压缩)。 如果内容长度不是已知的,并且压缩被设定为“on”或更积极的,则输出也将被压缩。 如果没有指定,这个属性被设置为“关闭”。

compressionMinSize

如果压缩被设定为“on”,那么此属性可被使用的输出被压缩之前指定的最小数据量。 如果没有指定,该属性默认为“2048”

这意味着,当在设定的压缩上。 如果它比2084更高的数据才会被压缩。

在我的Android客户端我使用下面的代码来寻找数据是否gzip压缩或不

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

我的问题

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

Answer 1:

服务器一无所知无论entity是在你的Android应用程序。 Tomcat的连接器将设置Content-Encoding如果gzip的是在使用中适当地响应报头。

此外,你的代码复杂得多,它需要的。 你可以这样做:

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

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



文章来源: How will an Android Client if Tomcat7 server has GZIP compressed?