Tomcat 7 GZIP压缩无法正常工作

时间:2013-05-20 16:07:11

标签: tomcat compression 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"/>

有什么想法吗?

4 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:9)

在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" />

这里的重要属性是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功能,例如使用sendfile的NIO连接器优先于压缩。症状将是静态文件大于48 Kb将被解压缩。您可以通过设置连接器的useSendfile属性来关闭sendfile,如下所述,或者在默认conf / web.xml或Web应用程序的web.xml中更改DefaultServlet配置中的sendfile使用率阈值。 p>

答案 2 :(得分:4)

在我的情况下,由于防病毒(ESET,Windows)

,它无法正常工作

在浏览器之前将它绑定到某处。它解压缩了正文并删除了“Content-Encoding”标题。对于浏览器响应看起来像普通的非压缩响应。即使在Fiddler,它也已经解压缩了。

Https响应正在运行,但是http resposes已被ESET解压缩。

这还不够。关闭ESET。我不得不去“高级设置” - &gt; “Web访问保护” - &gt; “HTTP,HTTPS”并将其关闭

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

答案 3 :(得分:3)

我在本地开发环境中测试了类似的server.xml更改,并且对它无法正常工作感到沮丧。

我的问题是我正在编辑我在Spring Tool中使用Servers window -> (right-click) -> New -> Server对话框时选择的本地Tomcat安装( C:\ apache-tomcat-8.0.5 )套件。

但是,发布时,正在使用的实际tomcat目录位于(工作区文件夹)\ .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0

您可以通过右键单击服务器并选择&#34;浏览部署位置...来检查发布的位置...&#34;

enter image description here

从那里你可以更新相应的server.xml文件,或者你可以删除并重新添加服务器。