GzipResponse must implement CloseNotifier if ResponseWriter implement it
This commit is contained in:
parent
22bdbd2498
commit
acd0c1bcd5
2 changed files with 16 additions and 3 deletions
2
glide.lock
generated
2
glide.lock
generated
|
@ -426,7 +426,7 @@ imports:
|
||||||
repo: https://github.com/ijc25/Gotty.git
|
repo: https://github.com/ijc25/Gotty.git
|
||||||
vcs: git
|
vcs: git
|
||||||
- name: github.com/NYTimes/gziphandler
|
- name: github.com/NYTimes/gziphandler
|
||||||
version: d6f46609c7629af3a02d791a4666866eed3cbd3e
|
version: 47ca22a0aeea4c9ceddfb935d818d636d934c312
|
||||||
- name: github.com/ogier/pflag
|
- name: github.com/ogier/pflag
|
||||||
version: 45c278ab3607870051a2ea9040bb85fcb8557481
|
version: 45c278ab3607870051a2ea9040bb85fcb8557481
|
||||||
- name: github.com/opencontainers/go-digest
|
- name: github.com/opencontainers/go-digest
|
||||||
|
|
17
vendor/github.com/NYTimes/gziphandler/gzip.go
generated
vendored
17
vendor/github.com/NYTimes/gziphandler/gzip.go
generated
vendored
|
@ -84,6 +84,14 @@ type GzipResponseWriter struct {
|
||||||
contentTypes []string // Only compress if the response is one of these content-types. All are accepted if empty.
|
contentTypes []string // Only compress if the response is one of these content-types. All are accepted if empty.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GzipResponseWriterWithCloseNotify struct {
|
||||||
|
*GzipResponseWriter
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *GzipResponseWriterWithCloseNotify) CloseNotify() <-chan bool {
|
||||||
|
return w.ResponseWriter.(http.CloseNotifier).CloseNotify()
|
||||||
|
}
|
||||||
|
|
||||||
// Write appends data to the gzip writer.
|
// Write appends data to the gzip writer.
|
||||||
func (w *GzipResponseWriter) Write(b []byte) (int, error) {
|
func (w *GzipResponseWriter) Write(b []byte) (int, error) {
|
||||||
// If content type is not set.
|
// If content type is not set.
|
||||||
|
@ -264,7 +272,6 @@ func GzipHandlerWithOpts(opts ...option) (func(http.Handler) http.Handler, error
|
||||||
|
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Add(vary, acceptEncoding)
|
w.Header().Add(vary, acceptEncoding)
|
||||||
|
|
||||||
if acceptsGzip(r) {
|
if acceptsGzip(r) {
|
||||||
gw := &GzipResponseWriter{
|
gw := &GzipResponseWriter{
|
||||||
ResponseWriter: w,
|
ResponseWriter: w,
|
||||||
|
@ -274,7 +281,13 @@ func GzipHandlerWithOpts(opts ...option) (func(http.Handler) http.Handler, error
|
||||||
}
|
}
|
||||||
defer gw.Close()
|
defer gw.Close()
|
||||||
|
|
||||||
h.ServeHTTP(gw, r)
|
if _, ok := w.(http.CloseNotifier); ok {
|
||||||
|
gwcn := GzipResponseWriterWithCloseNotify{gw}
|
||||||
|
h.ServeHTTP(gwcn, r)
|
||||||
|
} else {
|
||||||
|
h.ServeHTTP(gw, r)
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
h.ServeHTTP(w, r)
|
h.ServeHTTP(w, r)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue