减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。今天具体讲解以下知识点:
1、与压缩有关的HTTP首部字段
2、压缩的几种方式
3、nginx中如何配置
关注下面两个值
1、response headers中的content-encoding
2、request headers 中的accept-encoding
content-encoding是指网页使用了哪种压缩方式传输数据给你,accept-encoding表示你发送请求时告诉服务器,我可以解压这些格式的数据。
二者的关系是,对方网页会根据你发送的accept-encoding来决定用什么格式content-encoding传给你。
语法
Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *
// Multiple algorithms, weighted with the quality value syntax:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
1、gzip 使用 Lempel-Ziv 编码( LZ77 )的压缩格式,带有32位 CRC 。
2、compress 使用 Lempel-Ziv-Welch( LZW )算法的压缩格式。
3、deflate 使用 zlib 结构的压缩格式,以及 deflate 压缩算法。
4、br 使用 Brotli 算法的压缩格式。
5、dentity 指示身份功能(即不压缩,也不修改)。即使不存在,该值始终被认为是可以接受的。
若想要增加优先级,则使用 q= 来额外表示权重值 ,用分号(;)进行分隔。权重值 q 的范围是 0~1(可精确到小数点后 3 位),且 1 为最大值。不指定权重 q 值时,默认权重为 q=1.0。
另外,也可使用星号(*)作为通配符,指定任意的编码格式。
例子
Accept-Encoding: gzip
Accept-Encoding: gzip, compress, br
Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。一般对纯文本内容可压缩到原大小的40%,这样传输就快了,效果就是你点击网址后会很快的显示出来,当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的。
compress这个命令才是真正没什么用的命令,因为用compress命令压缩的文件可以用gzip解压,但是gzip压缩的文件却不能用uncompress命令解压。而且compress是一个非常老的工具,只有在非常旧的系统上才有,新版的系统上没有,还要额外安装,但是compress命令的压缩比又比不上gzip,谁会安装一个compress命令来用呢。
zlib和gzip都只是一种压缩格式,数据具体压缩成什么样,要看用的什么压缩算法,gzip目前只有deflate一种压缩算法,zlib有多种,但默认也使用deflate。
使用brotli替换deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。使用Brotli进行流压缩的内容编码类型已被提议使用“br”。
Brotli有更高的压缩率,但是同时也需要更长的压缩时间,所以在请求的时候实时进行压缩并不是一个很好的实践(当然你可以这么做)。我们可以预先对静态文件进行压缩,然后直接提供给客户端,这样我们就避免了Brotli压缩效率低的问题,同时使用这个方式,我们可以使用压缩质量最高的等级去压缩文件,最大程度的去减小文件的大小。
另外,由于不是所有浏览器都支持Brotli算法,所以在服务端,我们需要同时提供两种文件,一个是经过Brotli压缩的文件,一个是原始文件,在浏览器不支持Brotli的情况下,我们可以使用gzip去压缩原始文件提供给客户端。
配置
一般我们都是React和Vue项目最终打包之后都是html,css,js这样的静态文件,部署的话一般都是使用nginx作为静态资源服务器。那么简单介绍一下nginx如何配置压缩。
配置:/etc/nginx/conf.d/default.conf
location ~ .*\.(html|js|css)$ {
gzip on; #启用压缩
gzip_min_length 1k; #只压缩超过1K的文件
gzip_http_version 1.1; #启用gzip压缩所需的HTTP最低版本
gzip_comp_level 9; #压缩级别,压缩比率越高,文件被压缩的体积越小
gzip_types text/css application/javascript;#进行压缩的文件类型
root /data/www/html;
}
Google都提供了Brotli的Nginx模块. 我们可以自行编译来加入对Brotli的支持.,整个过程和配置其他模块没有太大的区别, 这里就简要地记录一下.
# 修改配置文件, 参数和Gzip大致相同
brotli on;
brotli_static off;
brotli_types text/css application/javascript;
brotli_buffers 4 16k;
brotli_comp_level 6;
brotli_window 512k;
brotli_min_length 512;
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!