Skip to main content
Version: Next

ETag

ETag middleware for Fiber that helps caches validate responses and saves bandwidth by avoiding full retransmits when content is unchanged.

Signatures​

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

Examples​

Import the middleware package:

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

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

// Initialize default config
app.Use(etag.New())

// GET / -> ETag: "13-1831710635"
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Hello, World!")
})

// Or extend your config for customization
app.Use(etag.New(etag.Config{
Weak: true,
}))

// GET / -> ETag: W/"13-1831710635"
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Hello, World!")
})

A matching If-None-Match yields 304 Not Modified only for GET and HEAD requests, the methods RFC 9110 defines it for. Other methods pass through unchanged, with the ETag header still set. They are not answered with 412 Precondition Failed: the middleware runs after the handler, over the response it produced, so the method has already been applied and the status whose purpose is to prevent that would misreport what happened.

Entity tags in requests must be quoted per RFC 9110. For example:

If-None-Match: "example-etag"

Config​

PropertyTypeDescriptionDefault
WeakboolEnables weak validators. Weak ETags are easier to generate but less reliable for comparisons.false
Nextfunc(fiber.Ctx) boolNext defines a function to skip this middleware when it returns true.nil

Default Config​

var ConfigDefault = Config{
Next: nil,
Weak: false,
}