网站优化之开启tomcat的gzip压缩传输特性

发布时间 2024-01-03 23:56:53作者: jackieathome

基于tomcat 8.0.x版本的文档,可以了解到tomcat支持基于gzip实现的压缩返回数据的特性。

配置方法

最简单的配置样例如下:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           compression="on" 
           />

关于启用gzip压缩传输特性,tomcat 8.0.x版本提供了如下几个参数:

  • compression,默认值为off。可能的取值有:

    • on,启用压缩传输特性;
    • off,关闭压缩的特性;
    • force,表示无条件启用压缩特性;
    • 正整数,启用压缩传输特性,同时指定了压缩操作门限值,当传输数据量超出门限时,tomcat即对传输数据执行压缩。

    当tomcat无法预先得知待传输数据的具体长度,而compression被设置为on,则tomcat自动压缩传输数据。

  • compressionMinSize,默认值是2048,即2KB,当传输的数据量大于2KB时,tomcat自动将待传输的数据执行压缩。

  • compressableMimeType,默认值为text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,基本上涵盖了当前能遇到的文件类型。

  • noCompressionUserAgents,默认值为空字符串,即不限制。tomcat将本配置的值当成正则表达式来使用,用来判定是否向特定的浏览器传输压缩数据,比如配置为"gozilla",则遇到UserAgent类型为gozilla的浏览器,则不对返回的数据执行压缩。

确认gzip已启用的方法

使用抓包工具或者浏览器的调试工具监控页面请求过程中的网络交互情况,重点检查tomcat返回浏览器的页面响应头部,可以发现gzip压缩传输启用前、后的差异。

  • 启用前

      Content-Length:1014
      Content-Type:text/html;charset=UTF-8
      Date:Sat, 14 Nov 2015 14:34:36 GMT
      Server:Apache-Coyote/1.1
    
  • 启用后

      Content-Encoding:gzip
      Content-Type:text/html;charset=UTF-8
      Date:Sat, 14 Nov 2015 14:37:34 GMT
      Server:Apache-Coyote/1.1
      Transfer-Encoding:chunked
      Vary:Accept-Encoding
    

因此使用抓包工具或者使用浏览器的调试工具观察HTTP交互数据时,如果发现响应头部的报文中带有如下三部分头部信息,基本上可以确认Web系统的tomcat已启用了gzip压缩传输的特性。

  • Content-Encoding:gzip
  • Transfer-Encoding:chunked
  • Vary:Accept-Encoding

注意事项

  • 依据官方文档,当用户选择的Connector支持sendfile特性时,如传输数据大于48KB,则优先使用sendfile特性来传输数据,并不会对待传输的数据执行压缩操作。

    如果需要对大于48KB的数据执行压缩操作,依据官方文档,有两种选择:

    1. 配置useSendfilefalse,则不会启用sendfile特性。
    2. 调整启用sendfile的门限值,修改${CATALINA_BASE}/conf/web.xmlDefaultServlet的配置项sendfileSize的取值,比如修改为96,则表明当待传输的数据大于96KB时,使用sendfile特性,低于96KB的数据则执行压缩。
  • 压缩传输可以有效降低浏览器与tomcat之间传输的数据量,但天下没有免费的午餐,启用压缩特性后,虽说减少了传输数据量,但却提升了浏览器和Web服务器的CPU占用率,因此不能为了追求压缩率,而将compressionMinSize配置为过小的值。

参考资料