2.4 对传输内容进行压缩
对传输内容进行压缩是提升 HTTP 服务可用性的关键手段。例如,使用 Gzip 压缩后,一个 100KB 的文件通常会减少到 30KB,体积降低 70%。这不仅提高了网络传输效率,还能减少带宽成本。。
所有现代浏览器、客户端和 HTTP 服务器软件都支持压缩技术。至于什么压缩算法,则由 HTTP 客户端和服务器通过主动协商机制确定(如图 2-8 所示):
- HTTP 客户端发送 Accept-Encoding 首部(包含它所支持的压缩算法,以及各自的优先级),
- 服务器则从中选择它支持一种算法,使用该算法对响应的消息主体进行压缩,并且发送 Content-Encoding 头部信息来告知 HTTP 客户端它选择了哪一种算法。
图 2-8 HTTP 压缩算法协商过程
默认情况下,一般使用 Gzip 对内容进行压缩,但针对 HTTP 类型内容还有一个更高压缩率的算法 Brotli。
Brotli 是 Google 推出的开源无损压缩算法,它内部包含一个预定义的字典,涵盖了超过 1,300 个常用单词和短语。Brotli 在压缩过程中将这些常见的词汇和短语作为整体进行匹配,从而大幅提升文本型内容( HTML、CSS 和 JavaScript 文件)的压缩密度。
如图 2-9 所示,各类型压缩算法在不同压缩等级下的效果对比。可以看到,Brotli 压缩效果比常用的 Gzip 高出 17% 至 30%。
图 2-9 Brotli、Zopfli、gzip 不同压缩等级下的压缩率对比
服务端的软件(如 nginx)安装好 Brotli 模块(ngx_brotli)后,可以与 gzip 一同启用,保持最大的兼容性。Nginx 中 Brotli 配置示例如下所示。
http {
brotli on; // 开启 brotli 压缩
brotli_comp_level 6; // 设置压缩等级
brotli_buffers 16 8k; // 设置缓冲的数量和大小
brotli_min_length 20; // 压缩的最小长度
brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; // 压缩类型
// gzip 配置
...
}
总字数:546字