diff --git a/_example/main.go b/_example/main.go index 07274c1..e1e6732 100644 --- a/_example/main.go +++ b/_example/main.go @@ -12,10 +12,14 @@ import ( func main() { r := gin.Default() - r.Use(gzip.Gzip( - gzip.DefaultCompression, - gzip.WithExcludedPaths([]string{"/ping2"}), - )) + r.Use( + func(c *gin.Context) { + c.Writer.Header().Add("Vary", "Origin") + }, + gzip.Gzip( + gzip.DefaultCompression, + gzip.WithExcludedPaths([]string{"/ping2"}), + )) r.Use(func(c *gin.Context) { log.Println("Request received") c.Next() diff --git a/gzip_test.go b/gzip_test.go index 6bce7e1..be64040 100644 --- a/gzip_test.go +++ b/gzip_test.go @@ -59,12 +59,41 @@ func newServer() *gin.Engine { c.Header("Content-Length", strconv.Itoa(len(testResponse))) c.String(200, testResponse) }) + router.GET("/ping", func(c *gin.Context) { + c.Writer.Header().Add("Vary", "Origin") + }, func(c *gin.Context) { + c.Header("Content-Length", strconv.Itoa(len(testResponse))) + c.String(200, testResponse) + }) router.Any("/reverse", func(c *gin.Context) { rp.ServeHTTP(c.Writer, c.Request) }) return router } +func TestVaryHeader(t *testing.T) { + req, _ := http.NewRequestWithContext(context.Background(), "GET", "/ping", nil) + req.Header.Add(headerAcceptEncoding, "gzip") + + w := httptest.NewRecorder() + r := newServer() + r.ServeHTTP(w, req) + + assert.Equal(t, 200, w.Code) + assert.Equal(t, "gzip", w.Header().Get(headerContentEncoding)) + assert.Equal(t, []string{headerAcceptEncoding, "Origin"}, w.Header().Values(headerVary)) + assert.NotEqual(t, "0", w.Header().Get("Content-Length")) + assert.NotEqual(t, 19, w.Body.Len()) + assert.Equal(t, w.Header().Get("Content-Length"), fmt.Sprint(w.Body.Len())) + + gr, err := gzip.NewReader(w.Body) + assert.NoError(t, err) + defer gr.Close() + + body, _ := io.ReadAll(gr) + assert.Equal(t, testResponse, string(body)) +} + func TestGzip(t *testing.T) { req, _ := http.NewRequestWithContext(context.Background(), "GET", "/", nil) req.Header.Add(headerAcceptEncoding, "gzip") diff --git a/handler.go b/handler.go index 30230bf..7d2086d 100644 --- a/handler.go +++ b/handler.go @@ -85,7 +85,7 @@ func (g *gzipHandler) Handle(c *gin.Context) { gz.Reset(c.Writer) c.Header(headerContentEncoding, "gzip") - c.Header(headerVary, headerAcceptEncoding) + c.Writer.Header().Add(headerVary, headerAcceptEncoding) c.Writer = &gzipWriter{c.Writer, gz} defer func() { if c.Writer.Size() < 0 {