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β
| Property | Type | Description | Default |
|---|---|---|---|
| Weak | bool | Enables weak validators. Weak ETags are easier to generate but less reliable for comparisons. | false |
| Next | func(fiber.Ctx) bool | Next defines a function to skip this middleware when it returns true. | nil |
Default Configβ
var ConfigDefault = Config{
Next: nil,
Weak: false,
}