gzip压缩简介
什么是gzip压缩 , gzip压缩是基于deflate中的算法进行压缩的 , gzip会产生自己的数据格式 , gzip压缩对于所需要压缩的文件 , 首先使用LZ77算法进行压缩 , 再对得到的结果进行huffman编码 , 根据实际情况判断是要用动态huffman编码还是静态huffman编码 , 最后生成相应的gz压缩文件 。
gzip和deflate的区别大家可能注意到了 , 在我们的HTTP请求头中 , 会存在accept-encoding字段 , 其实就是在告诉服务器 , 客户端所能接受的文件的压缩格式 , 其中包括gzip、deflate和br等 。
那么常见的gzip和deflate有什么区别呢?
1、GZIP , 好像是一个不透明的或原子的功能 。事实上 , HTTP定义了一种机制 , 一个Web客户机和Web服务器同意一压缩方案可以用来发送内容 , 这由使用Accept-Encoding和Content-Encoding标头完成 。有两种常用的HTTP压缩:DEFLATE和GZIP 。
2、DEFLATE是一个无专利的压缩算法 , 它可以实现无损数据压缩 , 有众多开源的实现算法 。该标准的实施库大多数人用的是zlib的 。zlib库提供用于压缩和解压缩使用DEFLATE/INFLATE的数据 。zlib库还提供了一种数据格式 , 混淆的命名ZLIB , 它包装DEFLATE压缩数据 , 具有报头和校验和 。
总而言之 , GZIP是使用DEFLATE进行压缩数据的另一个压缩库 。事实上 , GZIP的大多数实现实际使用zlib库的内部进行DEFLATE/ INFLATE压缩操作 。GZIP产生其自己的数据格式 , 混淆的命名GZIP , 它包装DEFLATE压缩数据 , 具有报头和校验和 。而由于最初的规定不统一问题 , 大多数情况下已经启用deflate压缩 。
gzip压缩原理接下来进入本文的正题之一 , gzip压缩的流程是怎么样的?
其实gzip压缩一般都是针对文本文件进行压缩 , 至于原因后面会介绍到 , 首先LZ77算法基于文本文件对文本内容 , 即文件中的字符串进行首次压缩 , 接下来 , 利用哈夫曼编码 , 转换为010111..等2进制进行存储 。那么具体的算法是怎样的呢?
1、LZ77算法LZ77算法的核心思想 , 是对字符串的重复利用 , 在扫描整个文本的过程中 , 判断之前的字符串中 , 有没有出现过类似的字符串或子字符串 , 通过这样的方式来压缩你的文本长度 , 举个简单的栗子:
文本内容如下:
http://www.qq.com
http://www.paipai.com
我们把相同的内容括起来
http://www.qq.com
( http://www.)paipai(.com)
用信息对替换之后的结果是
http://www.qq.com
(18,11)paipai(22,4)
其中
(18,11)中 , 18(起点到下一个起点 , 包含换行)为相同内容块与当前位置之间的距离 , 11为相同内容的长度 。
(22,4)中 , 22为相同内容块与当前位置之间的距离 , 4为相同内容的长度 。
由于信息对的大小 , 小于被替换内容的大小 , 所以文件得到了压缩 。
算法具体实现 , 首先你要明确几个名词概念:
1.前向缓冲区
每次读取数据的时候 , 先把一部分数据预载入前向缓冲区 。为移入滑动窗口做准备
2.滑动窗口
一旦数据通过缓冲区 , 那么它将移动到滑动窗口中 , 并变成字典的一部分 。
3.短语字典
从字符序列S1...Sn , 组成n个短语 。比如字符(A,B,D) ,可以组合的短语为{(A),(A,B),(A,B,D),(B),(B,D),(D)},如果这些字符在滑动窗口里面 , 就可以记为当前的短语字典 , 因为滑动窗口不断的向前滑动 , 所以短语字典也是不断的变化 。
在遍历整个文本的字符串的过程中 , 算法通过判断前向缓冲区中 , 是否存在滑动窗口中的最长子字符串 , 实现字符串的“复用” , 具体可以看下图:
![HTTP请求之gzip压缩知多少](http://img.jiangsulong.com/220425/0330001533-0.jpg)
文章插图
目前滑动窗口中存在的字符串 , 除去单字符的 , 则有AB、BD、ABD , 而前向缓冲区中 , 存在AB、ABC、BC , 最长的子字符串为AB , 则可以将ABC压缩为(0,2,C) , 其中0表示在滑动窗口中的偏移量 , 2表示读取两个字符 , C表示未匹配的字符 。接下来我们看一个完整的压缩案例你就懂了:(图片引自: https://www.jb51.net/article/... )
推荐阅读
- 2021阿里云申请免费SSL证书最新流程
- 庞统死后张飞和诸葛亮分兵进入蜀中,请问谁率先到达
- 秦始皇灭楚为什么请出王翦
- 个人原因辞职申请书简短?辞职申请书关于个人原因辞职
- API 请求失败后发生了什么?
- 只有IP 没有域名可以申请SSL证书吗?
- 谭松韵|谭松韵新剧《请叫我总监》定档,与林更新职场“过招”,你期待吗
- 请帮龙凤胎姐弟俩取名,谢谢!? 最有含义的龙凤胎小名
- 为什么有的网站是http,有的是https,一s之差,差很大
- IP SSL证书,如何申请?