gin-contrib/gzip

gin gzip is failed. maybe should fix it

gonboy opened this issue · 1 comments

please check . the same to Issue#400

Yes. I found gzip is invalid.

package main

import (
	"fmt"
	"github.com/gin-gonic/contrib/gzip"

	"github.com/gin-gonic/gin"
)
func main() {
	r := gin.Default()
	r.Use(gzip.Gzip(gzip.BestCompression))
	r.GET("/ping", func(c *gin.Context) {
		fmt.Println("return string")
		c.String(200, "welcome to china, baby")
	})
	r.Run(":80")
}

GOPATH\src\github.com\gin-gonic\contrib\gzip\gzip.go

func Gzip(level int) gin.HandlerFunc {
	return func(c *gin.Context) {

		if !shouldCompress(c.Request) {
			return
		}

		gz, err := gzip.NewWriterLevel(c.Writer, level)
		if err != nil {
			return
		}

		c.Header("Content-Encoding", "gzip")
		c.Header("Vary", "Accept-Encoding")
		c.Writer = &gzipWriter{c.Writer, gz}

		defer func() {
			c.Header("Content-Length", "0")
			gz.Close()
		}()
		c.Next()
	}
}

questions:

  1. if set
    c.Header("xxxContent-Encoding", "aaa")
    c.Header("123Content-Encoding", "aaa")
    you can track the before Http header .
    but if set
    c.Header("Content-Encodingxxxx", "aaa")
    couldn't track it
    <&emsp>
  2. couldn't find any zip information . except: Vary: Accept-Encoding
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Vary: Accept-Encoding
Date: Thu, 19 Jan 2017 07:36:37 GMT
Content-Length: 22
welcome to china, baby

@gonboy I've tested. It's work for me.

package main

import (
	"fmt"
	"github.com/gin-contrib/gzip"
	"github.com/gin-gonic/gin"
)
func main() {
	r := gin.Default()
	r.Use(gzip.Gzip(gzip.BestCompression))
	r.GET("/ping", func(c *gin.Context) {
		fmt.Println("return string")
		c.Header("Content-Encodingxxxx", "aaa")
		c.String(200, "welcome to china, baby")
	})
	r.Run(":8081")
}

curl -iH Accept-Encoding:gzip http://localhost:8081/ping
2017-06-27 4 13 57

Chrome developer tools
2017-06-27 4 23 01