那打开gzip为什么可以压缩数据呢?
因为gzip用了两种压缩算法:LZ77和Huffman编码。
- LZ77
这种算法类似正则的贪婪算法,比如我们又一段数据ABCDEFGADABCDEFG
,这边会出现ABCDEFG
的重复数据段,那后面重复段落,用相同段落距离和长度就可以表示,这边的话可以缩小长度为ABCDEFGAD(10,7)
。 - Huffman编码
我找到一篇极易理解的文章来学习它 HUFFMAN 编码压缩算法
gzip就是先用LZ77再用Huffman来实现压缩的。
然后提醒大家并不是所有请求打开gzip都是更好的。
比如说图片、PDF等资源文件请求打开gzip反而会增大响应时间和浪费cpu计算,为什么呢?
因为图片等资源本来也就已经用了压缩算法,再通过gzip算法压缩一遍,不但无法再压缩内容,反而会增大文件头尾信息部分,且浪费gzip压缩时的计算成本。