首先咱們先了解Apache Gzip的相關資料。 javascript
1、gzip介紹 php
Gzip是一種流行的文件壓縮算法,如今的應用十分普遍,尤爲是在Linux平臺。當應用Gzip壓縮到一個純文本文件時,效果是很是明顯的,大約能夠減小70%以上的文件大小。這取決於文件中的內容。 利用Apache中的Gzip模塊,咱們可使用Gzip壓縮算法來對Apache服務器發佈的網頁內容進行壓縮後再傳輸到客戶端瀏覽器。這樣通過壓縮後實際上下降了網絡傳輸的字節數,最明顯的好處就是能夠加快網頁加載的速度。 css
網頁加載速度加快的好處不言而喻,除了節省流量,改善用戶的瀏覽體驗外,另外一個潛在的好處是Gzip與搜索引擎的抓取工具備着更好的關係。 html
2、Web服務器處理 java
HTTP壓縮的過程以下: 算法
Web服務器接收到瀏覽器的HTTP請求後,檢查瀏覽器是否支持HTTP壓縮(Accept-Encoding 信息); apache
若是瀏覽器支持HTTP壓縮,Web服務器檢查請求文件的後綴名; 瀏覽器
若是請求文件是HTML、CSS等靜態文件,Web服務器到壓縮緩衝目錄中檢查是否已經存在請求文件的最新壓縮文件; 緩存
若是請求文件的壓縮文件不存在,Web服務器向瀏覽器返回未壓縮的請求文件,並在壓縮緩衝目錄中存放請求文件的壓縮文件; 服務器
若是請求文件的最新壓縮文件已經存在,則直接返回請求文件的壓縮文件;
若是請求文件是動態文件,Web服務器動態壓縮內容並返回瀏覽器,壓縮內容不存放到壓縮緩存目錄中。
3、開啓Gzip
Apache利用Gzip壓縮算法進行壓縮的模塊有兩種:mod_gzip 和mod_deflate。
如今瀏覽器自己也自動Gzip壓縮功能,支持Accept-Encoding: gzip,deflate ,這裏我在firefox瀏覽器下測試。
經過查看HTTP頭,咱們能夠快速判斷使用的客戶端瀏覽器是否支持接受gzip壓縮。
若發送的HTTP頭中出現如下信息,則代表你的瀏覽器支持接受相應的gzip壓縮:
Accept-Encoding: gzip 支持mod_gzip
Accept-Encoding: deflate 支持mod_deflate
Accept-Encoding: gzip,deflate
同時支持mod_gzip 和mod_deflate Apache內置有mod_deflate模塊來啓用gzip功能,但假如安裝apache的時候沒有編譯相關模塊,就須要你手動安裝一次,以啓用它:
首先到你的apache源碼目錄,查找到mod_deflate.c文件 ,一般位置:apachehttpd源碼目錄/modules/filters/mod_deflate.c,進入上面找到的目錄運行下面的命令:
/usr/local/apache2/bin/apxs -i -c -a mod_deflate.c
注:apxs目錄請參照您本身的機器,一般在apache安裝目錄的bin目錄下。
安裝完成,到apache的modules目錄看看是否是有了mod_deflates.so,httpd.conf中打開deflate_Module和headers_Module模塊:
LoadModule deflate_module modules/mod_deflate.so
加載mod_deflate.so模塊,默認安裝會自動寫入httpd.conf。
若是服務器開啓了對Gzip組件的支持,那麼咱們就能夠在http.conf定製文件壓縮,下面是一個配置的簡單實例:
一、mod_gzip方式
# mod_gzip
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
<ifModule>
二、deflate_Module方式
(1)嚴格匹配文件類型
# mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6 #壓縮率, 6是建議值.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/php
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/gif image/png image/jpe image/swf image/jpeg image/bmp
# Don’t compress images and other #排除不須要壓縮的文件
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 .(?:html|htm)$ no-gzip dont-varySetEnvIfNoCase
#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</ifmodule>
(2)過濾文件類型
# mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6
SetOutputFilter DEFLATE #壓縮全部文件
#Don’t compress images and other #過濾不須要壓縮文件
#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>
文件MIME類型能夠根據本身狀況添加,也能夠經過瀏覽器查看connect-type:
4、mod_gzip 和mod_deflate的主要區別是什麼?(來自互聯網)
首先一個區別是安裝它們的Apache Web服務器版本的差別。Apache 1.x系列沒有內建網頁壓縮技術,因此纔去用額外的第三方mod_gzip 模塊來執行壓縮。而Apache 2.x官方在開發的時候,就把網頁壓縮考慮進去,內建了mod_deflate 這個模塊,用以取代mod_gzip。雖然二者都是使用的Gzip壓縮算法,它們的運做原理是相似的。 第二個區別是壓縮質量。mod_deflate 壓縮速度略快而mod_gzip 的壓縮比略高。通常默認狀況下,mod_gzip 會比mod_deflate 多出4%~6%的壓縮量。 那麼,爲何使用mod_deflate?第三個區別是對服務器資源的佔用。 通常來講mod_gzip 對服務器CPU的佔用要高一些。mod_deflate 是專門爲確保服務器的性能而使用的一個壓縮模塊,mod_deflate 須要較少的資源來壓縮文件。這意味着在高流量的服務器,使用mod_deflate 可能會比mod_gzip 加載速度更快。