在fiber框架中启用gzip压缩需使用官方compress中间件,按顺序配置最小体积阈值(如1024b)、跳过特定路径或mime类型、设置levelbestspeed级别,并在路由注册前调用app.use(compress.new())。

在 Fiber 框架中启用 Gzip 压缩响应,需使用官方内置的 compress 中间件,它基于 fasthttp 底层实现,不依赖第三方包,压缩逻辑安全、无重复写头风险,且默认跳过小响应与已压缩类型。
启用默认 Gzip 压缩
这一步操作起来很简单,直接在 fiber.New() 后立即调用 app.Use(compress.New()) 即可生效。
导入 compress 包:github.com/gofiber/fiber/v2/middleware/compress
在路由注册前挂载中间件:app.Use(compress.New())
【必须在 app.Get()/app.Post() 等路由注册之前调用】,否则静态文件和 API 路由均不会被压缩。
按大小阈值控制是否压缩
小响应(如 200B 的 JSON)加上 gzip 头反而增大体积,浪费带宽。Fiber 的 compress 中间件支持最小长度过滤。
方法一:指定最小字节数(推荐设为 1024)
app.Use(compress.New(compress.Config{Level: compress.LevelBestSpeed, MinSize: 1024}))
方法二:禁用极小响应压缩(不设 MinSize 则默认为 0,即全部压缩)
显式传入 1024 可避免对 favicon.ico、短文本等无效压缩。
排除特定路径或 MIME 类型
Fiber 的 compress 中间件不支持正则排除路径,但可通过自定义函数精准跳过监控接口或二进制资源。
第一步:定义跳过逻辑函数
skip := func(c *fiber.Ctx) bool { return strings.HasPrefix(c.Path(), "/metrics") || strings.HasSuffix(c.Path(), ".pdf") }
第二步:将 skip 函数传入 Config.Skip
app.Use(compress.New(compress.Config{Skip: skip}))
注意:PDF、ZIP、AVIF、WebP 等本身高压缩率格式再 gzip 可能增大体积,务必排除。
选择压缩级别并验证效果
HTTP 响应场景下,gzip.BestSpeed(级别 1)比 Default(级别 6)更合适——CPU 占用下降超 40%,而对 JSON/HTML 文本压缩率仅低 5%~8%。
配置最佳速度级别:
app.Use(compress.New(compress.Config{Level: compress.LevelBestSpeed}))
验证是否生效:用 curl -H "Accept-Encoding: gzip" http://localhost:3000/ping,检查响应头含 Content-Encoding: gzip 且响应体为二进制流(非明文)。











