GZip、deflate和sdch壓縮(網摘整理)


GZip和deflate:

gzip是一種數據格式,默認且目前僅使用deflate算法壓縮data部分;
deflate是一種壓縮算法,是huffman編碼的一種加強。

deflate與gzip解壓的代碼幾乎相同,可以合成一塊代碼。
區別僅有:

deflate使用inflateInit(),而gzip使用inflateInit2()進行初始化,比 inflateInit()多一個參數: -MAX_WBITS,表示處理raw deflate數據。因為gzip數據中的zlib壓縮數據塊沒有zlib header的兩個字節。使用inflateInit2時要求zlib庫忽略zlib header。在zlib手冊中要求windowBits為8..15,但是實際上其它范圍的數據有特殊作用,見zlib.h中的注釋,如負數表示raw deflate。
Apache的deflate變種可能也沒有zlib header,需要添加假頭后處理。即MS的錯誤deflate (raw deflate).zlib頭第1字節一般是0x78, 第2字節與第一字節合起來的雙字節應能被31整除,詳見rfc1950。例如Firefox的zlib假頭為0x7801,python zlib.compress()結果頭部為0x789c。

deflate 是最基礎的算法,gzip 在 deflate 的 raw data 前增加了 10 個字節的 gzheader,尾部添加了 8 個字節的校驗字節(可選 crc32 和 adler32) 和長度標識字節。

 

SDCH:

我們知道,為了加快網絡傳輸,一般都使用gzip對文本進行壓縮。如果你現在用最新版的chrome去訪問頁面,然后打開network控制面板,查看http headers,細心的你會發現在Request Headers里的Accept-Encoding不再是gzip,deflate,而是多了個sdch,變成了gzip,deflate,sdch。如圖:

 

SDCH到底是什么

sdch是Shared Dictionary Compression over HTTP的縮寫,即通過字典壓縮算法對各個頁面中相同的內容進行壓縮,減少相同的內容的傳輸。如:一個網站中一般都是共同的頭部和尾部,甚至一些側邊欄也是共同的。之前的方式每個頁面打開的時候這些共同的信息都要重新加載,但使用SDCH壓縮方式的話,那些共同的內容只用傳輸一次就可以了。

sdch主要分為3個部分:首次請求,下載字典,之后的請求。

這種方式最開始的時候是Google工具欄里為IE准備的,目前Chrome已經完全支持了,不過暫時還沒發現哪個網站在使用。

SDCH與ajax+pushState

SDCH壓縮方式是為了減少相同內容的傳輸的,同時之前介紹的ajax+pushState也是減少相同內容的傳輸,他們想達到的效果是一樣的。只是SDCH是Google出的,可能今后一段時間只有Chrome瀏覽器支持,但pushState是HTML5的一個標准,目前已經有Chrome和Firefox支持,之后會有越來越多的瀏覽器支持。

個人覺得SDCH可能沒有什么太大的發展,但可以作為一個新方向研究,並且在合適的時候添加到標准里,讓網絡傳輸越來越迅速。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM