Tomcat配置gzip压缩提高浏览网站的速度
HTTP压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript,Text,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP,JSP,ASP,Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人
一对于Tomcat5.0以后的版本是支持对输出内容进行压缩的使用的是gzip压缩格式
下面是tomcat5.5.20中的$tomcat_home$/conf/server.xml的原内容
<Connectorport="80"maxHttpHeaderSize="8192"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"URIEncoding="utf-8"/>
<!--Note:Todisableconnectiontimeouts,setconnectionTimeoutvalue
to0-->
<!--Note:Tousegzipcompressionyoucouldsetthefollowingproperties:
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml"
-->从上面的第8行内容可以看出,要使用gzip压缩功能,你可以在Connector实例中加上如下属性即可
1)compression="on"打开压缩功能
2)compressionMinSize="2048"启用压缩的输出内容大小,这里面默认为2KB
3)noCompressionUserAgents="gozilla,traviata"对于以下的浏览器,不启用压缩
4)compressableMimeType="text/html,text/xml"压缩类型(默认为text/html,text/xml,text/plain)
我这里的配置内容为:
<Connectorport="80"maxHttpHeaderSize="8192" maxThreads="150"minSpareThreads="25"maxSpareThreads="75" enableLookups="false"redirectPort="8443"acceptCount="100" connectionTimeout="20000"disableUploadTimeout="true"URIEncoding="utf-8" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/> <!--Note:Todisableconnectiontimeouts,setconnectionTimeoutvalue to0--> <!--Note:Tousegzipcompressionyoucouldsetthefollowingproperties: compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml" -->
一旦启用了这个压缩功能后,我们怎么来测试压缩是否有效呢?首先Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,所以我们可以用httpclient来写一个这样的简单测试程序
importorg.apache.commons.httpclient.HttpClient; importorg.apache.commons.httpclient.methods.GetMethod; publicclassHttpTester{ publicstaticvoidmain(String[]args)throwsException{ HttpClienthttp=newHttpClient(); GetMethodget=newGetMethod("http://www.dlog.cn/js/prototype.js"); try{ get.addRequestHeader("accept-encoding","gzip,deflate"); get.addRequestHeader("user-agent","Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.0;AlexaToolbar;Maxthon2.0)"); inter=http.executeMethod(get); if(er==200){ System.out.println(get.getResponseContentLength()); Stringhtml=get.getResponseBodyAsString(); System.out.println(html); System.out.println(html.getBytes().length); } }finally{ get.releaseConnection(); } } }
执行这个测试程序,看看它所输出的是什么内容,如果输出的是一些乱码,以及打印内容的长度远小于实际的长度,那么恭喜你,你的配置生效了,你会发现你网站的浏览速度比以前快多了。