读书人

tomcat 起用Gzip 压缩网页数据

发布时间: 2012-06-28 15:20:03 作者: rapoo

tomcat 启用Gzip 压缩网页数据

??????? 网页压缩:是一项由 WEB 服务器和浏览器之间共同遵守的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,现在流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 tomcat、Apache 和 IIS 等。双方的协商过程如下:

1、首先浏览器请求某个URL 地址,并在请求的头 (head) 中设置属性 accept-encoding 值为gzip, deflate,表明浏览器支持 gzip 和 deflate 这两种压缩方式(事实上 deflate 也是使用 gzip 压缩协议);
2、WEB 服务器接收到请求后判断浏览器是否支持压缩,如果支持就传送压缩后的响应内容,否则传送不经过压缩的内容;
3、浏览器获取响应内容后,判断内容是否被压缩,如果是则解压缩,然后显示响应页面的内容。

所以若启用tomcat 的Gzip 压缩网页数据,只需修改tomcat中的配置,客户端及服务端均不用再做其它改动。

修改tomcat/conf/server.xml中tomcat访问端口8080的那个节点

配置gzip的属性有4个,分别如下:

compression:? off/on/force(不启用/启用压缩文本内容/强制压缩所有请求包含图片)
compressableMimeType: "text/html,text/xml,text/plain"(这是默认值,指定需要压缩的请求文档类型)
noCompressionUserAgents: 指定不需要压缩的浏览器Agent,使用逗号间隔
compressionMinSize: 2048 对小于该配置大小的文件不进行压缩(单位:B,也就是默认是2K)。注该属性自Tomcat7中有效

配置实例:



用httpclient来检测GZip压缩是否生效:

package test;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.methods.GetMethod;public class Test {public static void main(String[] args) {HttpClient http = new HttpClient();GetMethod get = new GetMethod("http://localhost:8080/test/test.jsp");try {get.addRequestHeader("accept-encoding", "gzip,deflate");get.addRequestHeader("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)");int er = http.executeMethod(get);if (er == 200) {System.out.println(get.getResponseContentLength());String html = get.getResponseBodyAsString();System.out.println(html);System.out.println(html.getBytes().length);}} catch (Exception e) {e.printStackTrace();} finally {get.releaseConnection();}}}



??????? 执行这个测试程序,看看它所输出的是什么内容,如果输出的是一些乱码,以及打印内容的长度远小于实际的长度,那么说明配置生效了,并且网站的浏览速度比以前会快很多。

检测GZip压缩的网站:

1、国外的:http://www.seoconsultants.com/tools/compression
2、国产的:http://gzip.iamzz.com/
3、官方文档:http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Standard_Implementation

?

读书人网 >Web前端

热点推荐