diff --git a/config/confighttp/compression.go b/config/confighttp/compression.go index 48898a6279c..4efc6cf22eb 100644 --- a/config/confighttp/compression.go +++ b/config/confighttp/compression.go @@ -44,6 +44,7 @@ type compressRoundTripper struct { compressionType configcompression.Type compressionParams configcompression.CompressionParams compressor *compressor + bufferPool *sync.Pool } var zstdReaderPool sync.Pool @@ -179,6 +180,11 @@ func newCompressRoundTripper(rt http.RoundTripper, compressionType configcompres compressionType: compressionType, compressionParams: compressionParams, compressor: encoder, + bufferPool: &sync.Pool{ + New: func() any { + return &bytes.Buffer{} + }, + }, }, nil } @@ -192,7 +198,12 @@ func (r *compressRoundTripper) RoundTrip(req *http.Request) (*http.Response, err } // Compress the body. - buf := bytes.NewBuffer([]byte{}) + buf := r.bufferPool.Get().(*bytes.Buffer) + defer func() { + buf.Reset() + r.bufferPool.Put(buf) + }() + if err := r.compressor.compress(buf, req.Body); err != nil { return nil, err }