本文于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. JVM运行时参数

    JVM运行时参数 JVM运行时参数是用于配置和调整Java虚拟机的行为和性能的参数.这些参数可以在启动Java应用程序时通过命令行或配置文件进行设置,合理配置参数可以使JVM虚拟机的达到更好的性能,降 ...

  2. Java面向对象之内部类的几类使用场景

    介绍 Java内部类是一种特殊的类,它定义在另一个类的内部.内部类提供了许多有用的特性,包括访问外部类的私有成员.隐藏实现细节以及实现回调接口等.以下是Java内部类的一些常用场景及其举例说明: 回调 ...

  3. [golang] 变量声明和初始化 var, :=, new() 和 make()

    [golang] 变量声明和初始化 var, :=, new() 和 make() 说明 go语言中,提供了多种变量声明和初始化的方法.这里着重一一说明.并提供一个简单的指南. 指南 使用make() ...

  4. SpringBoot Starter大全

    spring Boot应用启动器基本的一共有44种,具体如下 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-b ...

  5. 【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数

    问题描述 在Azure App Service for Windows的环境中,部署.NET应用,其中使用了 SAP NetWeaver RFC函数 (需要加载 sapnwrfc.dll).详细的错误 ...

  6. MVVM --- 实现多层级通知

    引言 在实际开发场景中,当ViewModel内的一个属性是一个 ObservableCollection<T> 或者是一个多层级 class 的时候,有可能有的需求需要 Observabl ...

  7. Kubernetes CKA考试之Killer Simulator(下)

    写在前面 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 注:学习交流使用 目录 写在前面 Question 16 | Na ...

  8. Zabbix“专家坐诊”第192期问答汇总

    问题一 Q:请问下,客户机snmptrap发告警为啥server web收不到,关键是snmptrap日志已经收到,zabbix server配置以及开启snmptrap=1 snmptrap=var ...

  9. Springboot K8s Job 一次性任务 如何禁用端口监听

    问题:SpringBoot一次性任务执行时,也会默认监听服务端口,当使用k8s job运行时,可能多个pod执行存在端口冲突 解决办法:命令行禁用SpringBoot一次性任务启动时端口占用 java ...

  10. ReACT介绍与llama_index ReActAgent实践

    Agent是大模型的重要应用方向,而ReACT是学术界提出的重要方法,本文介绍ReACT论文,然后通过llama_index ReActAgent来分析ReACT的执行过程. ReACT <RE ...