---
title: Brotli/Zstd 压缩与内容协商(Accept-Encoding、阈值与验证)
date: 2025-11-26
keywords:
- Brotli
- Zstd
- Accept-Encoding
- 压缩阈值
- 协商
description: 启用Brotli或Zstd并基于Accept-Encoding进行内容协商,设置压缩阈值与类型白名单,验证体积与延迟改善。
categories:
- 应用软件
- 视频软件
---
概述
Brotli与Zstd具备更高压缩比与更优速度,结合内容协商选择合适编码与阈值,减少传输体积与首屏时间。
关键实践与参数
- 协商: 按
Accept-Encoding选择br或zstd或gzip - 阈值: 仅对大于
1KB的文本资源启用压缩 - 白名单:
text/htmltext/cssapplication/javascript等 - 缓存: 按编码维度缓存并设置
Vary: Accept-Encoding
示例/配置/实现
gzip on; gzip_types text/plain text/css application/javascript application/json;
brotli on; brotli_types text/plain text/css application/javascript application/json;
add_header Vary Accept-Encoding;
import zlib from 'zlib'
function negotiate(req, res, body) {
const ae = req.headers['accept-encoding'] || ''
if (ae.includes('br')) zlib.brotliCompress(body, (_, buf) => { res.setHeader('Content-Encoding', 'br'); res.end(buf) })
else if (ae.includes('zstd')) res.end(body)
else if (ae.includes('gzip')) zlib.gzip(body, (_, buf) => { res.setHeader('Content-Encoding', 'gzip'); res.end(buf) })
else res.end(body)
}
验证
- 体积与延迟: 在支持Brotli的客户端观察传输体积与TTFB下降
- 协商正确: 不同编码下返回头与体积匹配
- 缓存命中: 设定
Vary后缓存命中率提升 - 兼容回退: 不支持时回退到原始或Gzip
注意事项
- 动态内容需评估压缩CPU开销
- 资源已压缩(如图片、视频)不再压缩
- 维持编码维度的缓存键一致
- 与CDN协商策略一致

发表评论 取消回复