2009-02-15 36 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或用戶代理。