gzip

gzip

文件壓縮程序
gzip是GNUzip的縮寫,最早用于UNIX系統的文件壓縮。HTTP協議上的gzip編碼是一種用來改進web應用程序性能的技術,web服務器和客戶端(浏覽器)必須共同支持gzip。目前主流的浏覽器,Chrome,firefox,IE等都支持該協議。常見的服務器如Apache,Nginx,IIS同樣支持gzip。gzip壓縮比率在3到10倍左右,可以大大節省服務器的網絡帶寬。而在實際應用中,并不是對所有文件進行壓縮,通常隻是壓縮靜态文件。
  • 中文名:
  • 外文名:GNUzip
  • 别名:
  • 縮 寫:gzip
  • 類 别:GNU自由軟件的文件壓縮程序
  • 開發者:Jean-loupGailly和MarkAdler

GZIP概念

GZIP最早由Jean-loup Gailly和Mark Adler創建,用于UNⅨ系統的文件壓縮。我們在Linux中經常會用到後綴為。gz的文件,它們就是GZIP格式的。現今已經成為Internet上使用非常普遍的一種數據壓縮格式,或者說一種文件格式。

HTTP協議上的GZIP編碼是一種用來改進WEB應用程序性能的技術。大流量的WEB站點常常使用GZIP壓縮技術來讓用戶感受更快的速度。這一般是指WWW服務器中安裝的一個功能,當有人來訪問這個服務器中的網站時,服務器中的這個功能就将網頁内容壓縮後傳輸到來訪的電腦浏覽器中顯示出來。一般對純文本内容可壓縮到原大小的40%。這樣傳輸就快了,效果就是你點擊網址後會很快的顯示出來。當然這也會增加服務器的負載。一般服務器中都安裝有這個功能模塊的。

面對着海量的數據需要交互,傳輸和存儲數據的要求就變的非常迫切。壓縮後的數據會占用比原來數據小很多的存儲空間,在傳輸的過程中也會占用較少的帶寬并降低服務器的傳輸流量,從而進行快速的傳輸。

文件格式

gzip的基礎是DEFLATE,DEFLATE是LZ77與哈夫曼編碼的一個組合體。DEFLATE最初是作為LZW以及其它受專利保護的數據壓縮算法的替代版本而設計的,當時那些專利限制了compress以及其它一些流行的歸檔工具的應用。

文件格式說明:

    10字節的頭,包含幻數、版本号以及時間戳可選的擴展頭,如原文件名文件體,包括DEFLATE壓縮的數據8字節的尾注,包括CRC-32校驗和以及未壓縮的原始數據長度

    盡管這種文件格式允許多個這樣的數據拼接在一起,在解壓時也能認出它們是拼接在一起的數據,但通常gzip僅用來壓縮單個文件。多個文件的壓縮歸檔通常是首先将這些文件合并成一個tar文件,然後再使用gzip進行壓縮,最後生成的。tar。gz或者。tgz文件就是所謂的“tar壓縮包”或者“tarball”。

    注意不要将gzip和ZIP壓縮格式混淆。ZIP也使用DEFLATE算法,而且可移植性更好,不需要一個外部的歸檔工具就可以包容多個文件。但是,由于ZIP對每個文件進行單獨壓縮而沒有利用文件間的冗餘信息(即固實壓縮),所以ZIP的壓縮率會稍遜于tar壓縮包。

    gzip命令的常用選項

      -c,--stdout将解壓縮的内容輸出到标準輸出,原文件保持不變-d,--decompress解壓縮-f,--force強制覆蓋舊文件-l,--list列出壓縮包内儲存的原始文件的信息(如,解壓後的名字、壓縮率等)-n,--no-name壓縮時不保存原始文件的文件名和時間戳,解壓縮時不恢複原始文件的文件名和時間戳(此時,解出來的文件,其文件名為壓縮包的文件名)-N,--name壓縮時保存原始文件的文件名和時間戳,解壓縮時恢複原始文件的文件名和時間戳-q,--quiet抑制所有警告信息-r,--recursive遞歸-t,--test測試壓縮文件完整性-v,--verbose冗餘模式(即顯示每一步的執行内容)-1、-2、。。。、-9壓縮率依次增大,速度依次減慢,默認為-6

      派生品和其它應用

      在大多數Linux發行版中,通過使用zx選項來提取。tar。gz格式的壓縮文件,例如:tar-zxf file。tar。gz

      zlib是DEFLATE算法的實現庫,它的API同時支持gzip文件格式以及一個簡化的數據流格式。zlib數據流格式、DEFLATE以及gzip文件格式均已被分别标準化為RFC 1950、RFC 1951、RFC 1952。

      gzip在HTTP壓縮,一種在萬維網中加速傳輸HTML和其他内容的技術。它是在RFC2016中規定的三種标準HTTP壓縮格式之一。這個RFC(征求意見稿)頁定義了一種叫做"DEFLATE"的zlib格式,它和gzip格式相同,除了gzip添加了11字節頭部和尾部的負載。但是,還是建議使用gzip而不是zlib,因為根據RFC 1950,IE還沒有正确的實現該标準,還不能處理zlib格式。

      zlib DEFLATE已經在Protable Network Graphics(PNG)格式中使用。

      自20世紀90年代末期以來,一個基于數據塊排序算法的文件壓縮工具bzip2作為gzip的替代者逐漸得到流行,它可以生成相當小的壓縮文件,尤其是對于源代碼和其他結構化文本更是這樣,但代價是最高達4倍的内存與處理器時間消耗。bzip2壓縮的tar包傳統上叫作。tar。bz2或。tbz。

      AdvanceCOMP和7zip内部也有一個DEFLATE實現,可以制作gzip兼容的壓縮文件,與gzip相比有更高的壓縮率,不過比較耗費處理器的處理時間。

      gzip壓縮文件對應的解壓程序是gunzip。

      gzip命令

      減少文件大小有兩個明顯的好處,一是可以減少存儲空間,二是通過網絡傳輸文件時,可以減少傳輸的時間。gzip是在Linux系統中經常使用的一個對文件進行壓縮和解壓縮的命令,既方便又好用。

      語法:gzip[選項]壓縮(解壓縮)的文件名

      該命令的各選項含義如下:

      -c将輸出寫到标準輸出上,并保留原有文件。

      -d将壓縮文件解壓。

      -l對每個壓縮文件,顯示下列字段:

      壓縮文件的大小;未壓縮文件的大小;壓縮比;未壓縮文件的名字

      -r遞歸式地查找指定目錄并壓縮其中的所有文件或者是解壓縮。

      -t測試,檢查壓縮文件是否完整。

      -v對每一個壓縮和解壓的文件,顯示文件名和壓縮比。

      -num用指定的數字num調整壓縮的速度,-1或--fast表示最快壓縮方法(低壓縮比),

      -9或--best表示最慢壓縮方法(高壓縮比)。系統缺省值為6。

      指令實例:

      gzip*

      %把當前目錄下的每個文件壓縮成gz文件。

      gzip-dv*

      %把當前目錄下每個壓縮的文件解壓,并列出詳細的信息。

      gzip-l*

      %詳細顯示例1中每個壓縮的文件的信息,并不解壓。

      gzip usr。tar

      %壓縮tar備份文件usr。tar,此時壓縮文件的擴展名為。tar。gz。

      快速啟動

      在WordPress中雖然有插件可以啟動Gzip網頁壓縮,不過能通過幾句語法來達到網頁壓縮,這樣不是更好嗎?其實在PHP中,有一句語法是可以開啟Gzip的,隻要加在網頁輸出的前端即可。在WordPress中,其實大部分的緩存插件都有内建啟動Gzip壓縮功能,不論是老牌的緩存插件WP Super Cache、輕巧的1 Blog Cacher或是hyper Cache都可以啟動Gzip網頁壓縮功能。如果你沒有裝這些插件,或是這些插件雖然啟動了Gzip功能但是檢測出來卻沒有壓縮,那你可能需要通過插件GZippy來啟動,不過通過這個插件來啟動時,記得緩存插件本身的Gzip要關掉,否則可能造成沖突。

      第一步:打開IIS,啟用HTTP壓縮服務

      右擊“網站”->“屬性”,選擇“服務”。在“HTTP壓縮”框中選中“壓縮應用程序文件”和“壓縮靜态文件”,按需要設置“臨時目錄”和“臨時目錄的最大限制”;

      第二步:啟用web服務

      第三步:修改MetaBase。xml

      開始>運行中輸入c:windowssystem32inetsrv,找到MeteBase。xml,先備份,再修改。(有的服務器不需要修改此文件便可以使用)

      ⅡS或Apache啟用GZIP壓縮優化網站

      先來了解一下GZIP,gzip是GNU zip的縮寫,它是一個GNU自由軟件的文件壓縮程序,也經常用來表示gzip這種文件格式。軟件的作者是Jean-loupGailly和Mark Adler。1992年10月31日第一次公開發布,版本号是0。1,穩定版本是1。2。4。

      gzip可以極大的加速網站。有時壓縮比率高達80%,近來測試了一下,最少都有40%以上,還是相當不錯的。在Apache2之後的版本,模塊名不叫gzip,而叫mod_deflate

      1、Apache啟用gzip

      如果要開啟gzip的話,一定要打開下面二個模塊。

      LoadModule headers_module modules/mod_headers。so

      LoadModule deflate_module modules/mod_deflate。so

      設置壓縮比率,取值範圍在1(最低)到9(最高)之間,不建議設置太高,雖然有很高的壓縮率,但是占用更多的CPU資源。

      DeflateCompressionLevel 3

      AddOutputFilter DEFLATE html xml php js css

      SetOutputFilter DEFLATE

      BrowserMatch^Mozilla/4 gzip-only-text/html

      BrowserMatch^Mozilla/4。0[678]no-gzip

      BrowserMatchbMSIE!no-gzip!gzip-only-text/html

      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|mov|avi|mp3|mp4|rm)$no-gzip dont-vary

      Header append Vary User-Agent env=!dont-vary#對代理的設置

      下面二個測試網站

      測試數據對css

      Original Size:44 KB

      Gzipped Size:10 KB

      Data Savings:77。27%

      測試數據js

      Original Size:6 KB

      Gzipped Size:2 KB

      Data Savings:66。67%

      測試數據php

      Original Size:62 KB

      Gzipped Size:15 KB

      Data Savings:75。81%

      上面隻是随機拿的幾個數據,看的出來,使用了gzip壓縮後文件小多了。

      另外講一下,有關squid對gzip的處理

      在squid中,對同一個URL隻保留一份緩存。對于如果不同browser(是否支持壓縮)如果頻繁交替訪問,例如:對某個cache住的目标,一個http/1。0請求可能會導緻squid強制更新其緩存。但接下來的另一個http/1。1請求又會導緻squid再次更新緩存。這樣那squid緩存數據就要頻繁更新,這就極大的降低了cache命中率。

      不過還好,現實環境中不支持壓縮的browser畢竟是很少的情況,所以對于緩存命中率的降低很有限。

      這個神通廣大的模塊就是mod_gzip。它通過用和gzip一樣的壓縮算法對apache發出的頁面進行壓縮,可能的話可以把頁面壓縮成為原來大小的十份之一。哪,如果10K的頁面隻要傳1K這不就是提速10倍嘛。當然一般網頁隻可以達到3-6倍。那也很不錯。對吧。連google這樣一個大的網站都采用這個技術。你還不快跟上?

      這樣一個好東東,來來來,我告訴你如何安裝:分3步,1、下載,2、修改配置,3、測試。

      安裝,配置

      把mod_gzip放到你的apache的源代碼目錄下,新建一個mod_gzip目錄如果需要補丁(針對1。3。17。la版)還需運行:

      patch mod_gizp。c

      按你需要,在配置中選擇動态DSO或靜态編譯進apache系統。如何處理在README中講得很清楚,如-add-module=mod_gzip。c,make,make install等等。這裡不多講。

      把下列配置加入httpd。conf尾部。

      #MOD_GZIP configuration

      mod_gzip_on Yes

      mod_gzip_minimum_file_size 1002

      mod_gzip_maximum_file_size 0

      mod_gzip_maximum_inmem_size 60000

      mod_gzip_item_include mime"application/x-httpd-php"

      mod_gzip_item_include mime text/*

      mod_gzip_item_include mime "httpd/unix-directory"

      mod_gzip_dechunk Yes

      mod_gzip_temp_dir"/tmp"

      mod_gzip_keep_workfiles No

      mod_gzip_item_include file"。php3quot;

      mod_gzip_item_include file"。txtquot;

      mod_gzip_item_include file"。htmlquot;

      mod_gzip_item_exclude file"。cssquot;

      mod_gzip_item_exclude file"。jsquot;

      在保存修改後運行

      …/bin/apachectl configtest确保配置修改無誤。

      然後用apachectl restart指令重起服務。

      修改,測試

      在宣布做好了之前在測試一下是優秀程序員的習慣。為了盡量不影響你的用戶的浏覽,我們可以用把新的apache驅動在8080端口上或者用指令控制mod_gzip起作用的目錄,而不是一下子全用mod_gzip。

      用法如下:

      MOD_GZIP configuration

      沒有問題後你就可以讓你的用戶很開心的發現’XX網站好快哦。’

      Mod_gzip真的很神奇,100K的HTML大文檔隻要12K就可以傳到用戶端了。越先采用這個技術你的用戶對你的網站的高速度印象就越深。不過有所得必有所失,由于解壓是在客戶端進行的,效果和用戶的浏覽器有一定關系。

      2、ⅡS啟用gzip

      現代的浏覽器IE6和Firefox都支持客戶端Gzip,也就是說,在服務器上的網頁,傳輸之前,先使用Gzip壓縮再傳輸給客戶端,客戶端接收之後由浏覽器解壓顯示,這樣雖然稍微占用了一些服務器和客戶端的CPU,但是換來的是更高的帶寬利用率。對于純文本來講,壓縮率是相當可觀的。如果每個用戶節約50%的帶寬,那麼你租用來的那點帶寬就可以服務多一倍的客戶了。

      ⅡS6已經内建了Gzip壓縮的支持,可惜,沒有設置更好的管理界面。所以要打開這個選項,還要費些功夫。

      在服務器中新建一個文件夾,名稱任意,給本機用戶添加寫入權限。

      進入IIS管理器,IIS管理器>網站右鍵進入“屬性”面闆,切換到“服務”選項卡,勾選HTTP壓縮中兩項,如果僅僅想壓縮靜态文件,那麼第一項就算了。臨時目錄就是剛才新建的那個文件夾。

      确認後進入IIS管理器>Web服務擴展,點擊“添加一個新的Web服務擴展”,在彈出的面闆中首先輸入擴展名,名稱任意;然後在“要求的文件”中添加文件,其實就是輸入gzip。dll所在的路徑。如果不是特立獨行的服務器,那麼這個位置基本上就是“C:WINDOWSsystem32inetsrvgzip。dll”,确認後記得将“設置擴展狀态為允許”勾選。

      進入C:WINDOWSsystem32inetsrv這個目錄下,找到一個叫MetaBase。xml的文件,直接修改保存是不行的,因為IIS服務正在使用該文件。強烈建議先備份該文件,再在一個副本上修改。用文本編輯器打開副本,用查找功能找到“IIsCompressionScheme”,共有3處,都在一起,分别是deflate、gzip和Parameters,deflate也是一種壓縮格式,不過性能上不如gzip。需要修改的是deflate和gzip這兩段,參數基本一樣,都要修改。

      HcDynamicCompressionLevel是用來設置壓縮率,默認是0,最高是10。低壓縮級别生成稍大一些的壓縮文件,但對CPU和内存資源的總體影響較小。高壓縮級别通常會生成較小的壓縮文件,但會占用較多的CPU時間和内存。有人說設置成9性價比最高。

      HcFileExtensions是用來設置壓縮的靜态文件擴展名,默認是htm、html、txt,根據網站的自身情況添加擴展名,最基本的是js、css。添加時注意原有的換行格式。

      HcScriptFileExtensions是用來設置壓縮的動态文件擴展名,默認是asp、dll和exe,根據需要自行添加擴展名,無外乎aspx、php等。可以将這一項的默認删除留空,這樣所有的動态響應都以壓縮方式發送。另外,還将動态壓縮 HcFileExtensions 中所有未指定的靜态文件類型,并且因此不将它們放入緩存。同樣地,必須将HcDoDynamicCompression設置為true,以進行動态壓縮。

      把IIS服務停止,用剛才保存的副本替換原有的MetaBase。xml

      重啟IIS服務,如果一切正确,那麼Gzip就啟動了。

      可以在這個地址檢測Gzip的工作情況。

      置文件在windows目錄下的system32/inetsrv/metabase。xml

      找到"/LM/W3SVC/Filters/Compression/deflate"和Location="/LM/W3SVC/Filters/Compression/gzip"

      兩個配置段内均有HcDynamicCompressionLevel="5",請選擇你認為合适的數值,這裡我設置的是5。

      如果要對動态網頁進行壓縮,則要修改如下配置項

      HcScriptFileExtensions="asp

      dll

      exe"

      将你要壓縮的文件的擴展名填進去就可以了。

      特别提示:這種壓縮優化流量的方法,對于文本文件比較有效,大約能壓縮50%(我一個200k左右的頁面包含js和css壓縮後118k左右),圖片則效果很差。另外壓縮比高對于服務器來說也會導緻cpu負載過高,所以建議不要設置太高的壓縮比。

      修改配置文件時請暫停IIS服務,保存後重新啟動服務即可。

      用Nginx的gzip模塊提升網站訪問效率

      Nginx自帶的有gzip模塊,這個模塊支持在線實時壓縮輸出數據流。經過良好的配置優化,可以大幅的提升網站的輸出效率。

      效果顯而易見。

      指令

      [#gzip gzip][#gzip_buffers gzip_buffers][#gzip_comp_level gzip_comp_level][#gzip_min_length gzip_min_length][#gzip_http_version gzip_http_version][#gzip_proxied gzip_proxied][#gzip_types gzip_types]

      指令詳解

      gzip

      語法:gzip on|off

      默認值:gzip off

      作用域:http,server,location,if(x)location

      開啟或者關閉gzip模塊

      gzip_buffers

      語法:gzip_buffers number size

      默認值:gzip_buffers 44k/8k

      作用域:http,server,location

      設置系統獲取幾個單位的緩存用于存儲gzip的壓縮結果數據流。例如44k代表以4k為單位,按照原始數據大小以4k為單位的4倍申請内存。48k代表以8k為單位,按照原始數據大小以8k為單位的4倍申請内存。

      如果沒有設置,默認值是申請跟原始數據相同大小的内存空間去存儲gzip壓縮結果。

      gzip_comp_level

      語法:gzip_comp_level1。。9

      默認值:gzip_comp_level1

      作用域:http,server,location

      gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理最慢(傳輸快但比較消耗cpu)。

      gzip_min_length

      語法:gzip_min_length length

      默認值:gzip_min_length 0

      作用域:http,server,location

      設置允許壓縮的頁面最小字節數,頁面字節數從header頭中的Content-Length中進行獲取。

      默認值是0,不管頁面多大都壓縮。

      建議設置成大于1k的字節數,小于1k可能會越壓越大。即:gzip_min_length1024

      gzip_http_version

      語法:gzip_http_version1。0|1。1

      默認值:gzip_http_version1。1

      作用域:http,server,location

      識别http的協議版本。由于早期的一些浏覽器或者http客戶端,可能不支持gzip自解壓,用戶就會看到亂碼,所以做一些判斷還是有必要的。注:21世紀都來了,除了類似于百度的蜘蛛之類的東西不支持自解壓,99。99%的浏覽器基本上都支持gzip解壓了,所以可以不用設這個值,保持系統默認即可。

      gzip_proxied

      語法:gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]。。。

      默認值:gzip_proxied off

      作用域:http,server,location

      Nginx作為反向代理的時候啟用,開啟或者關閉後端服務器返回的結果,匹配的前提是後端服務器必須要返回包含"Via"的header頭。

      off-關閉所有的代理結果數據的壓縮expired-啟用壓縮,如果header頭中包含"Expires"頭信息no-cache-啟用壓縮,如果header頭中包含"Cache-Control:no-cache"頭信息no-store-啟用壓縮,如果header頭中包含"Cache-Control:no-store"頭信息private-啟用壓縮,如果header頭中包含"Cache-Control:private"頭信息no_last_modified-啟用壓縮,如果header頭中不包含"Last-Modified"頭信息no_etag-啟用壓縮,如果header頭中不包含"ETag"頭信息auth-啟用壓縮,如果header頭中包含"Authorization"頭信息any-無條件啟用壓縮

      gzip_types

      語法:gzip_types mime-type[mime-type。。。]

      默認值:gzip_types text/html

      作用域:http,server,location

      匹配MIME類型進行壓縮,(無論是否指定)"text/html"類型總是會被壓縮的。

      注意:如果作為http server來使用,主配置文件中要包含文件類型配置文件

      http{ include conf/mime。types;。。。。。。}

      如果你希望壓縮常規的文件類型,可以寫成這個樣子

      http{

      include conf/mime。types;

      gzip on;:gzip_min_length 1000;

      gzip_buffers 4 8k;:gzip_http_version 1。1;

      gzip_types text/plain application/x-javascript text/css text/html application/xml;

      。。。。。。

      }

相關詞條

相關搜索

其它詞條