2015-06-03 87 views
2

我使用tomcat8并试图模拟CSS和JS的GZIP压缩。我已经添加在server.xml中的条目,并遵循Tomcat8 CSS,JS的Gzip压缩

<Connector port="8088" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 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" /> 

在我的html页面我已经包含了脚本如下

<script type="text/javascript" src="extjs/ext-all-debug.js"></script> 

但在访问该页面,压缩没有发生和resposne头收到如下。

Remote Address:[::1]:8088 
Request URL:http://localhost:8088/test/extjs/ext-all-debug.js 
Request Method:GET 
Status Code:200 OK 

响应头

view source 
Accept-Ranges:bytes 
Content-Length:4585183 
Content-Type:application/javascript 
Date:Wed, 03 Jun 2015 00:34:12 GMT 
ETag:W/"4585183-1427778288000" 
Last-Modified:Tue, 31 Mar 2015 05:04:48 GMT 
Server:Apache-Coyote/1.1 

请求头

view source 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Host:localhost:8088 
Referer:http://localhost:8088/test/index.html 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 

请帮我找到这里出了什么问题。当我在远程服务器上执行此设置时也是如此。

回答

8

我添加了属性useSendfile值为false。

手册上说:

(布尔)使用该属性可以启用或禁用sendfile的能力。默认值是true。请注意,使用sendfile将禁用Tomcat可能对响应执行的任何压缩。

我的tomcat8正在压缩一个大的html文件。

我的连接器:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      useSendfile="false" 
      compression="on" 
      compressionMinSize="2048" 
      noCompressionUserAgents="gozilla, traviata" 
      compressableMimeType="text/html,text/xml,text/plain,text/css" 
      redirectPort="8443" /> 

提琴手信息:

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Accept-Ranges: bytes 
ETag: W/"560012-1444044890000" 
Last-Modified: Mon, 05 Oct 2015 11:34:50 GMT 
Content-Type: text/html 
Transfer-Encoding: chunked 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Date: Tue, 06 Oct 2015 08:53:53 GMT 
1

我碰到了同样的问题来到与tomcat8的angularjs申请工作时。它有一些大的js文件。将useSendfile设置为'false'部分有所帮助,从某种意义上说,有些文件被压缩,但不是全部。在进一步的研究中,我发现有必要在compressableMimeType中添加'application/javascript'。这适用于所有的JavaScript文件。

从tomcat8文档

值是MIME类型的逗号分隔的列表可被用于其中HTTP压缩。默认值是text/html,text/xml,text/plain,text/css,text/javascript,application/javascript。