Go HTTP middleware which unpacks gzip, deflate, or zstd-encoded HTTP requests from clients.
- Unsupported
Content-Encodingvalues are passed through by default. - Enable strict mode to return HTTP 415 for unsupported encodings.
- Set a maximum decoded size to return HTTP 413 when the limit is exceeded.
r := chi.NewRouter()
r.Use(unpack.Middleware)
r.Post("/v1/status", someStatusHandler)
http.ListenAndServe("127.0.0.1:8080", r)r := chi.NewRouter()
r.Use(func(next http.Handler) http.Handler {
return unpack.MiddlewareWithOptions(next, unpack.Options{
MaxDecompressedBytes: 10 << 20, // 10 MB
StrictUnsupportedEncodings: true,
})
})
r.Post("/v1/status", someStatusHandler)
http.ListenAndServe("127.0.0.1:8080", r)encoder, err := zstd.NewWriter(nil)
if err != nil {
log.Fatal(err)
}
defer encoder.Close()
compressed := encoder.EncodeAll([]byte("hello"), nil)
req, err := http.NewRequest(http.MethodPost, "http://127.0.0.1:8080/v1/status", bytes.NewReader(compressed))
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Encoding", "zstd")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()