Back to Fiber

Compress

docs/middleware/compress.md

3.2.02.9 KB
Original Source

Compress

Compression middleware for Fiber that automatically compresses responses with gzip, deflate, brotli, or zstd based on the client's Accept-Encoding header.

:::note Bodies smaller than 200 bytes remain uncompressed because compression would likely increase their size and waste CPU cycles. See the fasthttp source. :::

Behavior

  • Skips compression for responses that already define Content-Encoding, for range requests, 206 responses, status codes without bodies, or when either side sends Cache-Control: no-transform.
  • HEAD requests negotiate compression so Content-Encoding, Content-Length, ETag, and Vary reflect the encoded representation, but the body is removed before sending.
  • When compression runs, strong ETag values are recomputed from the compressed bytes; when skipped, Accept-Encoding is still merged into Vary unless the header is * or already present.
  • Request-body decompression is still handled by Fiber's request APIs (for example c.Body()), and those decoders enforce the app BodyLimit for compressed payloads.

Signatures

go
func New(config ...Config) fiber.Handler

Examples

Import the middleware package:

go
import (
    "github.com/gofiber/fiber/v3"
    "github.com/gofiber/fiber/v3/middleware/compress"
)

Once your Fiber app is initialized, use the middleware like this:

go
// Initialize default config
app.Use(compress.New())

// Or extend your config for customization
app.Use(compress.New(compress.Config{
    Level: compress.LevelBestSpeed, // 1
}))

// Skip middleware for specific routes
app.Use(compress.New(compress.Config{
    Next:  func(c fiber.Ctx) bool {
      return c.Path() == "/dont_compress"
    },
    Level: compress.LevelBestSpeed, // 1
}))

Config

PropertyTypeDescriptionDefault
Nextfunc(fiber.Ctx) boolSkips this middleware when the function returns true.nil
LevelLevelCompression level to use.LevelDefault (0)

Possible values for the "Level" field are:

  • LevelDisabled (-1): Compression is disabled.
  • LevelDefault (0): Default compression level.
  • LevelBestSpeed (1): Best compression speed.
  • LevelBestCompression (2): Best compression.

Default Config

go
var ConfigDefault = Config{
    Next:  nil,
    Level: LevelDefault,
}

Constants

go
// Compression levels
const (
    LevelDisabled        = -1
    LevelDefault         = 0
    LevelBestSpeed       = 1
    LevelBestCompression = 2
)