HTTPgzip和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()结果头部为0x7c。
deflate 是最基础的算法,gzip 在 deflate 的 raw data 前增加了 10 个字节的
gzheader,尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节。