15 New: func() interface{} {
16 w, _ := gzip.NewWriterLevel(nil, gzip.BestSpeed) // #nosec
21 func getWriter(w io.Writer) *gzip.Writer {
22 gz := pool.Get().(*gzip.Writer)
31 func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
32 w.Header().Add("Vary", "Accept-Encoding")
33 if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
34 h.Handler.ServeHTTP(w, r)
37 w.Header().Set("Content-Encoding", "gzip")
39 w = &responseWriter{gz, w}
40 h.Handler.ServeHTTP(w, r)
45 type responseWriter struct {
46 w io.Writer // w wraps only method Write
47 http.ResponseWriter // embedded for the other methods
50 var _ http.ResponseWriter = (*responseWriter)(nil)
51 var _ http.Hijacker = (*responseWriter)(nil)
53 func (w *responseWriter) Write(p []byte) (int, error) { return w.w.Write(p) }
55 func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
56 h, ok := w.ResponseWriter.(http.Hijacker)
58 return nil, nil, errors.New("not a hijacker")