I'm starting to write server-side applications in Go. I'd like to use the Accept-Encoding
request header to determine whether to compress the response entity using GZIP
. I had hoped to find a way to do this directly using the http.Serve
or http.ServeFile
methods.
This is quite a general requirement; did I miss something or do I need to roll my own solution?
The New York Times have released their gzip middleware package for Go.
You just pass your http.HandlerFunc
through their GzipHandler
and you're done. It looks like this:
package main
import (
"io"
"net/http"
"github.com/nytimes/gziphandler"
)
func main() {
withoutGz := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
io.WriteString(w, "Hello, World")
})
withGz := gziphandler.GzipHandler(withoutGz)
http.Handle("/", withGz)
http.ListenAndServe("0.0.0.0:8000", nil)
}