Skip to content

Add gzip compression middleware to server #219

@yvrhdn

Description

@yvrhdn

Hi, we noticed that Server by default does not compress its responses, even if the client accepts this. I.e. when a http client sends a request with Accept-Encoding: gzip, the server can choose to compress the response (using gzip in this case) which will save bandwidth and is usually more efficient.

I suggest adding this to the middleware that is added by default. I'm basically echoing @bboreham's comments:

  • If it's not enabled by default, most users won't be able to profit from this
  • The Go http client will request compression and decompress responses by default, so a user will not even notice compression is used.

To implement this we can use nytimes/gziphandler. It's interface matches very closely with middleware.Interface so the entire implementation would be pretty small. gziphandler will by default only compress responses larger than 1400 bytes.

package middleware

import (
	"net/http"

	"github.com/NYTimes/gziphandler"
)

type Gzip struct {
}

func (g Gzip) Wrap(next http.Handler) http.Handler {
	return gziphandler.GzipHandler(next)
}

gziphandler is already being used by Cortex, so it has been battle tested with Server.

If this makes sense I can create a PR for this with tests etc.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions