2013-05-20 71 views
27

我在tomcat的conf/server.xml文件中添加了以下行来启用gzip压缩,但它不起作用。页面仍未压缩。Tomcat 7 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"/> 

任何想法?

+0

从未见过这种形式,如果出现某种解决方案将会很有趣。仅供您参考 - 在我们的项目中,我们使用以下方式http://blog.max.berger.name/2010/01/jetty-7-gzip-filter.html – Dewfy

+3

您的Tomcat实例是由Apache在端口80上面向前还是Tomcat直接在端口8080上访问? –

+0

嗨david..u是正确的..它由端口80上的apache前端,这就是我得到未压缩文件的原因......当我在端口8080上访问我的tomcat时,我得到压缩文件....感谢指向我在正确的方向.. –

回答

30

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

3

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

我的问题是,我是做编辑我的本地Tomcat安装(C:\ Apache的Tomcat的8.0.5),我使用弹簧工具套件的Servers window -> (right-click) -> New -> Server对话框时选择。

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

您可以通过右键单击服务器并选择检查的发布位置“浏览部署位置......”

enter image description here

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

3

在我的情况,因为杀毒软件的不工作(ESET,Windows)中

它是浏览器之前的某处绑定。它解压缩内容并删除“Content-Encoding”标题。对于浏览器响应看起来像正常没有压缩响应。即使在Fiddler中它也已经解压。

https响应正在工作,但http resposes被ESET分解。这是不够的。关闭ESET。我不得不去“高级设置” - >“Web访问保护” - >“HTTP,HTTPS”连接器。

7

在Windows上,我试图在我的开发环境中临时启用内容压缩以获得对应用程序中页面的总有效负载的粗略理解时遇到此行为。

我可以确认ESET NOD32 Antivirus的行为方式是@bugs_在他对此问题的回答中描述的方式,我也可以确认运行Fiddler4具有相同的效果。然而,无论是关闭提琴手和禁用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的NIO连接器将优先于压缩。症状将是静态文件大于48 Kb将被发送未压缩。您可以通过设置连接器的useSendfile属性来关闭sendfile,如下文所述,或者更改缺省conf/web.xml中或Web应用程序的web.xml中的DefaultServlet配置中的发送文件使用阈值。

+0

在我的情况是转动ESET足够。因为我的tomcat不从磁盘提供文件。 –

+0

Tomcat 9也是如此(https://tomcat.apache.org/tomcat-9.0-doc/config/http.html) – Drakonoved