brotli压缩应仅启用text/html、text/css、application/javascript、application/json、image/svg+xml等真正受益的文本类型,排除所有已压缩二进制格式如image/、font/、application/pdf等,并配合brotli_min_length、brotli_static、brotli_vary等参数协同生效。

指定 brotli_types 的核心原则是:只列真正受益于 Brotli 压缩的文本类 MIME 类型,排除所有已压缩或不适用的二进制格式。
必须包含的核心类型
这些是绝大多数网站静态和动态响应中体积大、频率高、压缩收益最显著的类型:
- text/html:HTML 页面主体,尤其是 SSR 或 PHP 渲染结果,漏掉会导致首页完全绕过 Brotli
- text/css:CSS 文件默认不被压缩,必须显式加入,否则样式表始终明文传输
- application/javascript:JS 资源压缩增益明显,现代前端几乎全靠它
- application/json:API 响应、配置、i18n 数据等,小而高频,-q 4 即高效
- image/svg+xml:SVG 是纯 XML 文本,未压缩时体积常达数 KB,Brotli 可再压 30%+,常被忽略但很关键
按需添加的补充类型
仅在站点实际提供对应内容时才加入,避免冗余:
- text/xml、application/atom+xml、application/xml+rss:用于 RSS/Atom 订阅源
- text/plain:日志、调试输出、纯文本接口等
务必排除的类型
这些格式本身已是高压缩比二进制,Brotli 不仅无效,还可能触发 500 错误或缓存混乱:
- image/*(如 image/png、image/jpeg、image/webp):PNG/JPEG/WebP 自带压缩,再压徒耗 CPU
- font/*(如 font/woff2、font/otf):WOFF2 内置 Brotli,重复压缩无意义
- application/pdf、audio/mpeg、video/mp4:通用二进制格式,不适用
- application/octet-stream:泛用二进制类型,极易误压,必须剔除
- 通配符 * 或正则 ~.*:绝对不要用,会命中图片、字体等资源,导致不可控行为
配合使用的必要参数
brotli_types 不是孤立配置,需与以下参数协同生效:
- brotli_min_length 1024:过滤微小响应(如空 JSON、304、短错误提示),避免低效压缩;API 密集场景可降至 256,但需监控 CPU
-
brotli_static always:启用预压缩优先策略,要求 .br 文件存在且权限正确;此时
brotli_types决定哪些后缀文件值得生成 .br - brotli_vary on:确保 CDN 和浏览器将 br 和 gzip 视为不同变体,防止缓存混淆
- 不混用 gzip_types:若保留 gzip 作兜底,gzip_types 应精简至仅 text/plain,避免与 brotli_types 重叠











