设置TOMCAT启用GZIP压缩 通过浏览器HTTP访问
<
Connector
port
="8080"
protocol
="HTTP/1.1"
connectionTimeout
="20000"
redirectPort
="8443"
executor
="tomcatThreadPool"
URIEncoding
="utf-8"
compression
="on"
compressionMinSize
="50"
noCompressionUserAgents
="gozilla, traviata"
compressableMimeType
="text/html,text/xml,text/javascript,text/css,text/plain"
/>
从上面节点的属性可以看出,要使用gzip压缩功能,你需要在Connector节点中加上如下属性
compression="on" 启动压缩功能
compressionMinSize="2048" 设置启动压缩文件的最小值,也就是说当请求的资源大小 大于该值时才启动压缩 默认2048byte 也就是2KB
noCompressionUserAgents="gozilla, traviata" 设置不启动压缩的浏览器 该内容会在http请求头中找到
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 设置哪些mime格式的资源需要压缩,具体格式可以再tomcat/conf/web.xml中找到
上面是专门针对Tomcat基于HTTP协议连接器(Connector)的配置,也就是只有当用户直接通过浏览器访问Tomcat的8080端口时,Tomcat才会针对配置进行GZIP压缩。如果我们的应用服务器是Apache+Tomcat集成的话 上面的配置就不起作用了,因为用户是通过浏览器访问Apache服务器,Apache服务器在转发请求到Tomcat去处理,他俩之间数据传输走的是另外一个连接器(Connector) [<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>], 但是AJP协议目前貌似还不支持GZIP的配置,所以我们只要自己扩展GZIP的压缩。
扩展的代码我们已经不需要去实现了,已经有现成的开源框架了,直接拿来用就可以了。pjl-comp-filter-1.8.1.jar
然后配置一下WEB.XML就可以了。
<
filter
>
<
filter-name
>
CompressingFilter
</
filter-name
>
<
filter-class
>
com.planetj.servlet.filter.compression.CompressingFilter
</
filter-class
>
<
init-param
>
<
param-name
>
compressionThreshold
</
param-name
><!-- 资源大小超过100byte的就被压缩 -->
<
param-value
>
100
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
includeContentTypes
</
param-name
><!-- 启动GZIP压缩的MIME类型 -->
<
param-value
>
text/html,text/xml,text/javascript,text/css,text/plain
</
param-value
>
</
init-param
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
CompressingFilter
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
还有一些其他的配置可以参考官方文档,在这里不一一说明了。还有就是对图片资源一般不启用GZIP压缩,因为他们已经采用高压算法了,在压缩没有意义反而会白白消耗服务器端的资源。