天天看點

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位元組一般是0×78, 第2位元組與第一位元組合起來的雙位元組應能被31整除,詳見rfc1950。例如Firefox的zlib假頭為0×7801,python zlib.compress()結果頭部為0x789c。

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

本文位址:http://www.sun87.cn/?p=54 , 轉載請保留.