你的浏览器还没开启 Javascript 功能!

GZip(一)简介

概括


请求头:accpet-encoding: gzip
返回头:content-encoding: gzip

比如我们在使用 webpack 打包工具的时候可以使用 compression-webpack-plugin 插件,在构建项目的时候进行 gzip 打包,详细的配置使用可以去看插件的文档。

Defalte 算法


gzip 使用 Deflate 算法,是一种无损解压缩算法。
先使用 Lz77 算法压缩,再用 Huffman 解码。

Lz77(压缩):

Lz77算法的原理是,如果文件中有两块内容相同的话,我们可以用两者之间的距离,相同内容的长度这样一对信息,来替换后一块内容。由于两者之间的距离,相同内容的长度这一对信息的大小,小于被替换内容的大小,所以文件得到了压缩。

举个例子:

http://www.baidu.com https://www.taobao.com

上面一段文本可以看到,前后有部分内容是相同的,我们可以用前文相同内容的距离和相同字符长度替换后文的内容。

http://www.baidu.com (21,12)taobao(23,4)

Deflate采用的Lz77算法是经过改进的版本,首先三个字节以上的重复串才进行偏码,否则不进行编码。其次匹配查找的时候用了哈希表,一个head数组记录最近匹配的位置和prev链表来记录哈希值冲突的之前的匹配位置。

Huffman(解码)

通过构造 Huffman Tree 的方式给字符重新编码(核心是避免一个叶子的路径是另外一个叶子路径的前缀),以保证出现频路越高的字符占用的字节越少。