2012年11月12日 星期一

Tomcat,Apache配置GZip壓縮(HTTP壓縮)功能

*修改自網路文章,文章源頭不確定

HTTP 壓縮可以大大提高瀏覽網站的速度
它的原理是,在客戶端請求網頁後,從Server將網頁文件壓縮
再下載到Client,由Client的瀏覽器負責解壓縮並瀏覽
相對於普通的瀏覽過程HTML ,CSS,JavaScript , Text ,它可以節省40%左右的流量
更為重要的是,它可以對動態生成的
包括CGI、PHP、JSP、ASP、Servlet、SHTML等輸出的網頁也能進行壓縮

一,對於Tomcat5.0以後的版本支持對輸出內容進行壓縮,使用的是gzip壓縮格式.
要使用gzip壓縮功能,你可以在Connector實例中加上如下屬性即可

1. compression="on"                                      打開壓縮功能
2. compressionMinSize="2048"                      啟用壓縮的輸出內容大小,這裡預設2KB
3. noCompressionUserAgents="gozilla, traviata"  對於以下的瀏覽器,不啟用壓縮
4. compressableMimeType="text/html,text/xml"   壓縮類型

下面是$tomcat_home$/conf/server.xml的配置內容

<Connector port="8080" protocol="HTTP/1.1"
        compression="on"
        compressionMinSize="2048"
        connectionTimeout="20000"
compressableMimeType="text/html,text/xml,text/plain,
                  text/css,text/json,text/javascript,
                application/x-javascript,application/javascript,
                application/jsp,application/json,image/jpeg,image/png"
         redirectPort="8443" />

對於某些text文件比如:log、txt等,我們也可以讓Server採用gzip壓縮傳輸
修改conf目錄下web.xml,添加

    <mime-mapping>
     <extension>log</extension>
     <mime-type>text/plain</mime-type>
    </mime-mapping>

就可以指定壓縮傳輸了
通常情況下,壓縮傳輸能大幅度提高展示速度

二,對於Apache而言,有兩種情況
1.針對Apache2.0之前的版本,它原本是不支持的
   不過可以通過添加第三方的module_gzip模組來啟用
2.針對Apache2.0及之後的版本,Apache提供支持;不過不叫gzip,而叫mod_deflate

下面就對Apache2.0及之後的版本作一個說明
1. 去掉#LoadModule headers_module modules/mod_headers.so前面的註釋#,
2. 添加LoadModule deflate_module modules/mod_deflate.so
3. 在VirtualHost中添加

    <Location "/">
         SetOutputFilter DEFLATE
         BrowserMatch ^Mozilla/4 gzip-only-text/html
         BrowserMatch ^Mozilla/4\.0[678] no-gzip
         BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
         SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
         Header append Vary User-Agent env=!dont-vary
    </Location>

以下為完整範例

# 加載deflate模組
LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so
<VirtualHost *:80>
     DocumentRoot f:/apacheTest
    <Location "/">
         SetOutputFilter DEFLATE
         BrowserMatch ^Mozilla/4 gzip-only-text/html
         BrowserMatch ^Mozilla/4\.0[678] no-gzip
         BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
         SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
         Header append Vary User-Agent env=!dont-vary
    </Location>
</VirtualHost>

沒有留言:

張貼留言