压缩数据是一个重要的、潜在的性能加速器。图片(JPEG 和 PNG)、视频 (MPEG-4)和音乐 (MP3) 等文件都有着精心打造和非常高效的压缩标准,其中任何一个标准都可以将文件缩小一个数量级甚至更多。而HTML(包括纯文本和 HTML 标签)、CSS 和代码(如 JavaScript)等文本数据经常在不压缩的情况下进行传输。压缩这些数据可能会对可感知到的 Web 应用性能产生特别明显的影响,尤其是对速度缓慢或移动连接受限的客户端来说。
智能内容压缩通常可以将 HTML、Javascript、CSS 和其他文本内容的带宽需求减少 30% 及以上,并相应地减少加载时间。如果使用 SSL,压缩可以减少必须进行 SSL 编码的数据量,从而抵消压缩数据所需的一些 CPU 时间。
目录
压缩原理
Nginx压缩是基于HTTP协议的压缩技术,它通过在服务器端对网页内容进行压缩,以减少传输的数据量,提高网页加载速度。Nginx压缩主要支持文本内容的压缩,如HTML、CSS、JavaScript等文件。
Nginx压缩主要通过Gzip算法来实现。该算法将文件内容分为多个小块,并对每个块进行压缩。压缩后的数据再进行传输,可以显著减少传输的数据量,提高网页加载速度。同时,浏览器端会进行相应的解压操作,将压缩后的数据还原为原始内容。
gzip所使用的算法是开源、无专利的 LZ77(Lempel-Ziv 1977)算法的变体。该算法寻找输入数据内的重复字符串。二次出现的字符串由一个指向前一字符串的指针(以对的形式 -- 距离和长度)代替。其中,距离限定为 32 KB,长度限定为 258 字节。如果字符串没有在这前 32 KB 内出现,它就会作为文字字节序列发出(这里所说的字符串 定义为随意字节序列,并不仅限于可打印的字符)。
使用压缩过程
浏览器-服务器压缩工作示例:

过程说明:
1、浏览器发出请求,请求头字段有”Accept-Encoding:gzip, deflate“ ,表示浏览器可支持压缩数据,压缩算法可支持gzip和deflate两种。
2、Nginx接到请求后,根据头字段”Accept-Encoding”,判断是否需要压缩。如果可压缩且算法也是Nginx所用的,就对响应(response)数据进行压缩,在返回时添加响应头字段“Content-Encoding:gzip”;否则,不压缩响应数据直接返回,也不添加头字段“Content-Encoding"。
3、浏览器收到响应后,查看是否有头字段“Content-Encoding",如果有且是支持的压缩算法,就对返回数据解压;否则,直接使用响应数据。
gzip压缩
gzip是Nginx主要压缩算法,由ngx_http_gzip_module模块实现。
压缩实例
下面是一个压缩配置例子:
# 启用gzip压缩
gzip on;
# 设置gzip压缩的级别
gzip_comp_level 1;
# 大于1024字节才压缩
gzip_min_length 1024;
# 设置gzip压缩类型
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 添加Vary头,告诉缓存服务器不同的浏览器可能会对同一份内容有不同的编码
gzip_vary on;
# 设置内存缓冲区大小,指定16个8KB的块作为输入和输出缓冲区
gzip_buffers 16 8k;
# 设置HTTP协议版本
gzip_http_version 1.1;
# 禁用gzip压缩对于Internet Explorer 6
gzip_disable "MSIE [1-6]\\.";
指令
gzip
格式:gzip on|off;默认:gzip off
启用或禁用gzip压缩。此指令需要在http、server或location块中设置。
gzip_types
格式:gzip_type

本文详细介绍了如何利用Nginx的gzip压缩技术优化HTML、CSS、JavaScript等文本数据的传输,展示了压缩原理、配置方法和实战效果,指出压缩能大幅缩短响应时间和资源传输,显著提升Web应用性能。
最低0.47元/天 解锁文章
885

被折叠的 条评论
为什么被折叠?



