diff --git a/backend/internal/http/router/handlers-web.go b/backend/internal/http/router/handlers-web.go index 52a37b7f0..6da8ef180 100644 --- a/backend/internal/http/router/handlers-web.go +++ b/backend/internal/http/router/handlers-web.go @@ -1,6 +1,7 @@ package router import ( + "compress/gzip" "encoding/json" "errors" "io" @@ -20,7 +21,27 @@ import ( func (e *Router) readBody(w http.ResponseWriter, r *http.Request, limit int64) ([]byte, error) { body := http.MaxBytesReader(w, r.Body, limit) - bodyBytes, err := io.ReadAll(body) + var ( + bodyBytes []byte + err error + ) + + // Check if body is gzipped and decompress it + if r.Header.Get("Content-Encoding") == "gzip" { + // Debug log + log.Printf("request body is gzipped") + // + reader, err := gzip.NewReader(body) + if err != nil { + return nil, err + } + bodyBytes, err = io.ReadAll(reader) + reader.Close() + } else { + bodyBytes, err = io.ReadAll(body) + } + + // Close body if closeErr := body.Close(); closeErr != nil { log.Printf("error while closing request body: %s", closeErr) } diff --git a/backend/internal/http/server/server.go b/backend/internal/http/server/server.go index 2670ba537..dacac6c35 100644 --- a/backend/internal/http/server/server.go +++ b/backend/internal/http/server/server.go @@ -30,7 +30,7 @@ func New(handler http.Handler, host, port string, timeout time.Duration) (*Serve WriteTimeout: timeout, } if err := http2.ConfigureServer(server, nil); err != nil { - log.Printf("can't configure http2 server: %s", err) + log.Printf("can't configure http server: %s", err) } return &Server{ server: server,