31

我在 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

4 回答 4

35

如果 Tomcat 在端口 80 上由 Apache 引导,则需要在 Apache 本身中启用压缩。Tomcat 中的压缩仅在您直接在端口 8080 上访问时才有效。

于 2013-05-21T14:58:05.793 回答
14

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

于 2016-03-26T17:58:39.187 回答
5

就我而言,由于防病毒(ESET,Windows),它不起作用

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

Https 响应正常,但 ESET 已解压缩 http 响应。

那还不够。关闭 ESET。我必须去“高级设置”->“Web访问保护”->“HTTP,HTTPS”并在那里关闭它

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

于 2016-03-24T16:25:11.053 回答
4

我正在本地开发环境中测试类似server.xml的更改,并且对它也不起作用感到沮丧。

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

但是,发布时,实际使用的 tomcat 目录位于(workspace folder)\.metadata\.plugins\org.eclipse.wst.server.core\tmp0中。

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

在此处输入图像描述

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

于 2014-06-22T23:48:50.970 回答