| 12345678910111213141516171819202122232425262728293031 |
- package main
- import (
- "compress/gzip"
- "io"
- "net/http"
- "strings"
- )
- type gzipResponseWriter struct {
- io.Writer
- http.ResponseWriter
- }
- func (w gzipResponseWriter) Write(b []byte) (int, error) {
- return w.Writer.Write(b)
- }
- func gzipHandler(fn http.HandlerFunc) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
- fn(w, r)
- return
- }
- w.Header().Set("Content-Encoding", "gzip")
- gz, _ := gzip.NewWriterLevel(w, gzip.BestSpeed)
- defer gz.Close()
- gzr := gzipResponseWriter{Writer: gz, ResponseWriter: w}
- fn(gzr, r)
- }
- }
|