2009-02-15 95 views
13

我使用Tomcat压缩我的HTML内容是这样的:Tomcat的压缩不添加内容编码:gzip的页眉

<Connector port="8080" maxHttpHeaderSize="8192" 
maxProcessors="150" maxThreads="150" minSpareThreads="25" 
maxSpareThreads="75" enableLookups="false" redirectPort="8443" 
acceptCount="150" connectionTimeout="20000" disableUploadTimeout="true" 
compression="on" compressionMinSize="128" noCompressionUserAgents="gozilla, traviata" 
compressableMimeType="text/html" 
URIEncoding="UTF-8" /> 

在HTTP标头(如通过YSlow的观察到的),但是,我我没有看到

Content-Encoding: gzip 

导致YSlow评分较差。

我看到的是

HeadersPost 
Response Headers 
Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=ISO-8859-1 
Content-Language: en-US 
Content-Length: 5251 
Date: Sat, 14 Feb 2009 23:33:51 GMT 

我运行一个apache的mod_jk Tomcat配置。

如何使用Tomcat压缩HTML内容,并在头文件中添加“Content-Encoding:gzip”?

+0

如果您使用mod_jk,您是否必须将其添加到ajp连接器,或者您是否也直接在端口8080上进行测试? – nos 2010-05-27 23:31:27

回答

6

看一看http://sourceforge.net/projects/pjl-comp-filter/

其他自定义解决方案可能有内存泄漏。

此外,如果您使用mod_jk,那么您当然不会使用8080连接器(它支持压缩)来处理这些请求。

+0

cherouvim:谢谢。我会看看。 – 2009-03-04 18:53:47

2

也许压缩Tomcat指的是不是gzip?这是黑暗中的刺,但它可能与白空间压缩或线条修剪有关。

我想在这方面Tomcat会更加明确(这里是希望)。

,我们通过我们的应用程序运行duffmo提到gzip的过滤器,在web.xml看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"> 

    <display-name>App-Web</display-name> 

    <!-- FILTERS --> 

    <!-- Gzip filter --> 
    <filter> 
     <filter-name>GZIPFilter</filter-name> 
     <filter-class>weblogicx.servlet.gzip.filter.GZIPFilter</filter-class> 
    </filter> 

    [snip]  
</web-app> 
+1

不,在tomcat中启用压缩就意味着gzip - 在tomcat 6.0.20下它可以正常工作,虽然我们在tomcat前没有apache – nos 2010-05-27 23:31:45

4

Tomcat将会进行压缩。但是,因为您使用的是mod_jk,我猜你是通过Apache端口80而不是端口8080上的tomcat获取请求的。作为实验尝试通过端口8080获取页面,然后检查yslow您应该看到正确的标题。

我认为发生的事情是,apache解压缩它通过mod_jk从tomcat获得的内容,然后将泄漏的内容传递给浏览器。

如果您想使用mod_jk,那么您将需要在Apache上设置压缩而不是在Tomcat上。

+2

无论如何,AJP是一种二进制协议,所以压缩将无法在AJP连接器上工作。 http://en.wikipedia.org/wiki/Apache_JServ_Protocol 无论压缩是否开启,我都不建议在高负载生产服务器上使用HTTP连接器。 – opyate 2010-03-26 10:45:50

1

我看了一下Tomcat文档浏览: http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

它提到使用compression="force"这为我工作。它还说你可以设置minimum number。这对我来说

<Connector port="8080" compression="256000" /> 

(压缩超过256Kb的任何东西)

compressableMimeType的默认值意味着我并不需要该属性正常工作。 另请注意,它没有列出CompressionMinSize属性。

1

要提高J2EE Web应用程序的整体客户端性能,您可以尝试WebUtilities java库。

这是链接:: http://code.google.com/p/webutilities/

它提供过滤器,标记,servlet组件来应用各种客户端性能实践,从而对PageSpeed/YSlow进行更高的性能评级。

从版本0.0.4开始,它有助于实现以下性能实践。

  1. 尽量减少HTTP请求 - 可以用于多个JS/CSS文件中的一个请求
  2. 客户端缓存 - 添加适当的Cache-Control,Expires头
  3. 在飞JS/CSS压缩 - 使用的YUICompressor
  4. 压缩 - 支持2路压缩的gzip /缩小/压缩编码在服务器
  5. 响应缓存 - 为了避免不变资源的再加工
  6. 添加字符编码 - 让浏览器预先知道

它也是高度可配置/定制对MIME,URL或用户代理。