Tomcat 7 GZIP压缩无法正常工作

N..*_*N.. 29 compression tomcat gzip server.xml

我在tomcat的conf/server.xml文件中添加了以下行以启用gzip压缩,但它无法正常工作.页面仍然是未压缩的.

 <Connector port="8080"
         compression="on"
         compressionMinSize="2048"
         noCompressionUserAgents="gozilla, traviata"
         compressableMimeType="text/html,text/xml,text/plain,text/css,
         text/javascript,text/json,application/x-javascript,
         application/javascript,application/json"/>
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Dav*_*que 32

如果Tomcat在端口80上面向Apache,则需要在Apache本身启用压缩.只有在端口8080上直接访问时,Tomcat中的压缩才有效.


Xha*_*lie 11

在Windows上,我在尝试在我的开发环境中临时启用内容压缩时遇到了这种行为,以便大致了解应用程序中页面的总有效负载.

我可以确认ESET NOD32 Antivirus的行为与@bugs_在他对这个问题的回答中描述的方式有关,我也可以确认运行Fiddler4具有相同的效果.但是,关闭Fiddler和禁用NOD32的HTTP扫描都无法解决问题,为此,我不得不在连接器中禁用"sendfile",如下所示:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           compression="on" compressionMinSize="8192" useSendfile="false"
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
           redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)

这里的重要属性是 useSendfile="false"

我在Windows下使用Apache Tomcat 8.Tomcat文档(http://tomcat.apache.org/tomcat-8.0-doc/config/http.html)说明以下内容useSendfile:

使用此属性可启用或禁用sendfile功能.默认值是true.请注意,使用sendfile将禁用Tomcat可能对响应执行的任何压缩.

这个关于compression:

在使用压缩(节省带宽)和使用sendfile功能(节省CPU周期)之间需要权衡.如果连接器支持sendfile功能,例如NIO连接器,则使用sendfile将优先于压缩.症状将是静态文件大于48 Kb将被解压缩.您可以通过设置连接器的useSendfile属性来关闭sendfile,如下所述,或者更改默认conf/web.xml或Web应用程序的web.xml中DefaultServlet配置中的sendfile使用率阈值.


bug*_*gs_ 5

在我的情况下,由于防病毒(ESET,Windows),它不起作用

它被绑定在浏览器之前的某个地方。它解压缩正文并删除“内容编码”标题。对于浏览器响应看起来像正常的未压缩响应。即使在 Fiddler 中,它也已经解压了。

Https 响应有效,但 ESET 对 http 响应进行了解压缩。

那还不够。关闭 ESET。我必须转到“高级设置”->“Web 访问保护”->“HTTP、HTTPS”并在那里将其关闭

如果您从硬盘驱动器提供文件,则可能需要在连接器中添加选项 useSendFile="false"。