HTTP 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) 和長度標識字節。

 

gzip和deflate的幾點區別


免責聲明!

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



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