本文于2015年底完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。


基于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配置为过小的值。

参考资料

网站优化之开启tomcat的gzip压缩传输特性的更多相关文章

  1. 网站访问优化(二):开启apache服务器gzip压缩

    昨天,把带宽从1M升级到2M,使用cdn版本的jquery之后,网站访问速度由平均5s(在禁止缓存的情况下,使用缓存大概在2.8s)下降到2.8s的样子. 今天,继续优化. 第1步:   把图片进行了 ...

  2. tomcat 启用Gzip 压缩进行优化

    打开conf/server.xml文件可以看到: <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->     <Con ...

  3. Tomcat启用GZIP压缩,提升web性能

    一.前言 最近做了个项目,遇到这么一个问题:服务器返回给客户端的json数据量太大(大概65M),在客户端加载了1分多钟才渲染完毕,费时耗流量,用户体验极其不好.后来网上搜优化的方法,就是Http压缩 ...

  4. 开启Nginx的gzip压缩功能详解

    默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行 ...

  5. PhpStudy如何开启Apache的gzip压缩功能?

    要让apache支持gzip功能,要用到deflate_Module和headers_Module. 打开apache的配置文件httpd.conf,大约在105行左右,找到以下两行内容:(这两行不是 ...

  6. 在windows、linux中开启nginx的Gzip压缩大大提高页面、图片加载速度<转>

    为了降低tomcat服务的压力,把页面上的图片采用windows版的nginx进行加载,由于有些图片比较大,加载特别的慢,所以在nginx中打开了gzip的压缩功能.加载图片的速度快了很多. 通过站长 ...

  7. Tomcat启用Gzip压缩

    原理简介         HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并 浏览.相对于普通的 ...

  8. Tomcat配置gzip压缩

    HTTP 压缩能够大大提高浏览站点的速度,它的原理是,在client请求网 页后,从server端将网页文件压缩,再下载到client,由client的浏览器负责解 压缩并浏览.相对于普通的浏览过程H ...

  9. tomcat中gzip压缩

    在tomcat中压缩文件,修改server.xml文件中的配置 <Connector port="8080" protocol="HTTP/1.1" co ...

  10. 给自己网站配置 https,http2 ,gzip压缩

    https 需要购买域名ssl证书 注意事项: 1.要开启HTTP/2协议支持,需要在nginx 1.10以上版本并且需要openssl库的版本在1.0.2及以上编译. 2.http2.0只支持开启了 ...

随机推荐

  1. 【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?

    问题描述 使用Azure Redis服务时,如突然遇见异常,命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?看是否有进行平台的维护呢 ...

  2. 2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,“Hello World“ ,“HELLO“ ,“hello world h

    2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,"Hello World" ,"HELLO&q ...

  3. 11 .Codeforces Round 891 (Div. 3)E. Power of Points(推公式+前缀和优化)

    E. Power of Points 题解参考 #include <bits/stdc++.h> #define int long long #define rep(i, a, b) fo ...

  4. PostgreSql一个月学习计划

    1.背景 国内使用数据库最多的莫过于mysql,大部分程序员第一次接触数据库就是mysql.(毕竟免费的 = =!)但近年来,有一些黑马出现(如下图),其中表现最突出的莫过于PostgreSQL.特规 ...

  5. Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(一)引子

    系列目录 Spring Cloud 系列之Hystrix.Ribbon.Feign 源码剖析(一)引子 Spring Cloud 系列之Hystrix.Ribbon.Feign 源码剖析(二)原理概括 ...

  6. [.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC

    ​上一章我们完成了小项目的面向服务体系改造,你或许一直在思考一个问题.为什么要将业务独立成微服务? 微服务原理 以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与 ...

  7. 生成文件名为系统时间的C源码实例

    一 最近遇到了一个需要根据时间记录文件名的.先写一个实例来实战: #include<stdlib.h> #include<time.h> #include<stdio.h ...

  8. TCP可靠传输的保证

    我们知道传输层提供最主要的两种协议,TCP和UDP,其中TCP是保证可靠传输,为什么他要保证可靠传输呢,IP说:当然是我不能,我只提供尽力而为的服务,不保证你能不能交付,不保证能不能正确的交付,不保证 ...

  9. NJUPT第一次积分赛

    NJUPT第一次积分赛 最近在忙第二次积分赛以及一些很复杂的队友关系(人际关系好复杂,好想电赛出个单机模式),但最后结果还是很满意的. 突然想起来第一次积分赛写的屎山,遂拿出来给大火闻闻 没啥很新颖的 ...

  10. package.json报错"No license field"问题解决

    问题描述 warning package.json: No license field 问题原因 package.json中缺少license字段 解决方法 package.json中添加licens ...