File tree 2 files changed +25
-5
lines changed
2 files changed +25
-5
lines changed Original file line number Diff line number Diff line change 27
27
gzipResponseWriter struct {
28
28
io.Writer
29
29
http.ResponseWriter
30
+ wroteBody bool
30
31
}
31
32
)
32
33
@@ -78,8 +79,9 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
78
79
}
79
80
rw := res .Writer
80
81
w .Reset (rw )
82
+ grw := & gzipResponseWriter {Writer : w , ResponseWriter : rw }
81
83
defer func () {
82
- if res . Size == 0 {
84
+ if ! grw . wroteBody {
83
85
if res .Header ().Get (echo .HeaderContentEncoding ) == gzipScheme {
84
86
res .Header ().Del (echo .HeaderContentEncoding )
85
87
}
@@ -92,7 +94,6 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
92
94
w .Close ()
93
95
pool .Put (w )
94
96
}()
95
- grw := & gzipResponseWriter {Writer : w , ResponseWriter : rw }
96
97
res .Writer = grw
97
98
}
98
99
return next (c )
@@ -101,9 +102,6 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
101
102
}
102
103
103
104
func (w * gzipResponseWriter ) WriteHeader (code int ) {
104
- if code == http .StatusNoContent { // Issue #489
105
- w .ResponseWriter .Header ().Del (echo .HeaderContentEncoding )
106
- }
107
105
w .Header ().Del (echo .HeaderContentLength ) // Issue #444
108
106
w .ResponseWriter .WriteHeader (code )
109
107
}
@@ -112,6 +110,7 @@ func (w *gzipResponseWriter) Write(b []byte) (int, error) {
112
110
if w .Header ().Get (echo .HeaderContentType ) == "" {
113
111
w .Header ().Set (echo .HeaderContentType , http .DetectContentType (b ))
114
112
}
113
+ w .wroteBody = true
115
114
return w .Writer .Write (b )
116
115
}
117
116
Original file line number Diff line number Diff line change @@ -106,6 +106,27 @@ func TestGzipNoContent(t *testing.T) {
106
106
}
107
107
}
108
108
109
+ func TestGzipEmpty (t * testing.T ) {
110
+ e := echo .New ()
111
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
112
+ req .Header .Set (echo .HeaderAcceptEncoding , gzipScheme )
113
+ rec := httptest .NewRecorder ()
114
+ c := e .NewContext (req , rec )
115
+ h := Gzip ()(func (c echo.Context ) error {
116
+ return c .String (http .StatusOK , "" )
117
+ })
118
+ if assert .NoError (t , h (c )) {
119
+ assert .Equal (t , gzipScheme , rec .Header ().Get (echo .HeaderContentEncoding ))
120
+ assert .Equal (t , "text/plain; charset=UTF-8" , rec .Header ().Get (echo .HeaderContentType ))
121
+ r , err := gzip .NewReader (rec .Body )
122
+ if assert .NoError (t , err ) {
123
+ var buf bytes.Buffer
124
+ buf .ReadFrom (r )
125
+ assert .Equal (t , "" , buf .String ())
126
+ }
127
+ }
128
+ }
129
+
109
130
func TestGzipErrorReturned (t * testing.T ) {
110
131
e := echo .New ()
111
132
e .Use (Gzip ())
You can’t perform that action at this time.
0 commit comments