gzip、brotli 和 zstd 压缩
当我们浏览网页的时候,现代浏览器向 Web 服务器发送 HTTP 请求时,它会添加以下请求头:
Accept-Encoding: gzip, deflate, br, zstd
这告诉服务器,可以使用以下压缩算法之一来压缩响应:gzip 和 deflate、brotli 和 zstandard。
gzip
- 基于 DEFLATE 算法(结合了哈夫曼编码和 LZ77 滑动窗口压缩)。
- 特点:广泛支持,成熟稳定,适用于大多数网页内容(如 HTML、CSS、JavaScript、JSON 等)。
- 压缩速度: 中等,压缩和解压速度平衡。
- 压缩率: 中等,通常比原始数据小 60%-80%(视内容而定)。
- 兼容性: 几乎所有浏览器和服务器都支持,是 HTTP 压缩的默认选择。
deflate
- DEFLATE 是 gzip 和 zlib 的核心算法,仅包含 LZ77 和哈夫曼编码,无额外封装。
- 特点:比 gzip 少了一些元数据开销(如 gzip 的文件头),但实际压缩效果与 gzip 几乎相同。
- 压缩速度: 与 gzip 相近。
- 压缩率: 与 gzip 相当,略低于 Brotli 和 zstd。
- 兼容性: 广泛支持,但实际应用中通常以 gzip 或 zlib 形式出现。
br (Brotli):
由 Google 开发,结合了 LZ77、哈夫曼编码和上下文建模,专为网页压缩优化。
- 特点: 提供更高的压缩率,尤其对文本数据(如 HTML、CSS、JavaScript)效果显著。
- 压缩速度: 压缩速度较慢(尤其是高压缩级别),解压速度较快。
- 压缩率: 通常比 gzip 高 15%-25%,在相同压缩级别下文件更小。
- 兼容性: 现代浏览器(Chrome、Firefox、Edge 等)普遍支持,逐渐成为高性能网站的标准。
zstd (Zstandard):
由 Facebook 开发,基于现代压缩技术(如有限状态熵编码和快速字典压缩)。
- 特点: 在压缩率和速度之间提供极佳平衡,支持实时压缩场景。
- 压缩速度: 压缩和解压速度非常快,适合高吞吐量场景。
- 压缩率: 接近或略优于 Brotli,比 gzip 和 deflate 高。
- 兼容性: 浏览器支持较少(2025 年仍未广泛支持),但在其他领域(如数据库、文件存储)使用较多。

image.png
哪个更好?
a. 压缩率
Brotli 和 zstd 在压缩率上优于 gzip 和 deflate,Brotli 尤其适合文本内容(如网页资源),能显著减少传输数据量,降低带宽成本。
对于大文件或重复性高的文本数据,Brotli 和 zstd 的优势更明显。b. 压缩/解压速度
zstd 在压缩和解压速度上表现最佳,适合需要快速响应的场景。
Brotli 压缩速度较慢(尤其在高压缩级别),可能增加服务器负担,但解压速度快,客户端体验良好。
gzip 和 deflate 在速度和资源占用上较为平衡,适合资源受限的服务器。c.浏览器兼容性
gzip 和 deflate 是最兼容的选择,几乎所有客户端都支持,适合需要最大兼容性的场景。
Brotli 在现代浏览器中支持良好(2025 年覆盖率约 95%),但老旧浏览器可能不支持。
zstd 目前在浏览器中支持有限,主要用于服务器端或其他非网页场景。d. 服务器资源
gzip 和 deflate 对服务器资源要求较低,适合低配服务器。
Brotli 的高压缩率需要更多 CPU 资源,可能增加服务器成本。
zstd 提供高效率,CPU 占用较低,但浏览器支持是瓶颈。
网页请求数据压缩的推荐
- 首选 Brotli: 如果目标用户使用现代浏览器(Chrome、Firefox、Edge 等),Brotli 是最佳选择。
它提供更高的压缩率,减少网络传输时间,改善网页加载速度。
推荐在服务器(如 Nginx、Apache)启用 Brotli,并配置动态压缩。 - 备选 gzip: 对于需要最大兼容性的场景(如老旧浏览器或设备),gzip 是安全的选择,性能与兼容性平衡良好。
- deflate: 实际应用中与 gzip 差异不大,通常不单独使用。
- zstd: 目前不推荐用于网页请求压缩,因为浏览器支持不足,但在未来可能成为替代方案(尤其在高吞吐量场景)。
Nginx 配置
http {
brotli on;
brotli_types text/plain text/css application/json application/javascript;
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
