23a6ad9356
The need has been spotted in issue https://github.com/hashicorp/consul/issues/3687. Using "NYTimes/gziphandler", the http api responses can now be compressed if required. The Go API requires compressed response if possible and handle the compressed response. We here change only the http api (not the UI for instance).
44 lines
1 KiB
Go
44 lines
1 KiB
Go
// +build go1.8
|
|
|
|
package gziphandler
|
|
|
|
import "net/http"
|
|
|
|
// Push initiates an HTTP/2 server push.
|
|
// Push returns ErrNotSupported if the client has disabled push or if push
|
|
// is not supported on the underlying connection.
|
|
func (w *GzipResponseWriter) Push(target string, opts *http.PushOptions) error {
|
|
pusher, ok := w.ResponseWriter.(http.Pusher)
|
|
if ok && pusher != nil {
|
|
return pusher.Push(target, setAcceptEncodingForPushOptions(opts))
|
|
}
|
|
return http.ErrNotSupported
|
|
}
|
|
|
|
// setAcceptEncodingForPushOptions sets "Accept-Encoding" : "gzip" for PushOptions without overriding existing headers.
|
|
func setAcceptEncodingForPushOptions(opts *http.PushOptions) *http.PushOptions {
|
|
|
|
if opts == nil {
|
|
opts = &http.PushOptions{
|
|
Header: http.Header{
|
|
acceptEncoding: []string{"gzip"},
|
|
},
|
|
}
|
|
return opts
|
|
}
|
|
|
|
if opts.Header == nil {
|
|
opts.Header = http.Header{
|
|
acceptEncoding: []string{"gzip"},
|
|
}
|
|
return opts
|
|
}
|
|
|
|
if encoding := opts.Header.Get(acceptEncoding); encoding == "" {
|
|
opts.Header.Add(acceptEncoding, "gzip")
|
|
return opts
|
|
}
|
|
|
|
return opts
|
|
}
|