diff options
Diffstat (limited to 'http/response/response.go')
-rw-r--r-- | http/response/response.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/http/response/response.go b/http/response/response.go index 066d061..c5ae3fa 100644 --- a/http/response/response.go +++ b/http/response/response.go @@ -5,7 +5,10 @@ package response import ( + "compress/flate" + "compress/gzip" "net/http" + "strings" "time" ) @@ -32,3 +35,23 @@ func Cache(w http.ResponseWriter, r *http.Request, mimeType, etag string, conten w.Write(content) } } + +// Compress the response sent to the browser. +func Compress(w http.ResponseWriter, r *http.Request, data []byte) { + acceptEncoding := r.Header.Get("Accept-Encoding") + + switch { + case strings.Contains(acceptEncoding, "gzip"): + w.Header().Set("Content-Encoding", "gzip") + gzipWriter := gzip.NewWriter(w) + defer gzipWriter.Close() + gzipWriter.Write(data) + case strings.Contains(acceptEncoding, "deflate"): + w.Header().Set("Content-Encoding", "deflate") + flateWriter, _ := flate.NewWriter(w, -1) + defer flateWriter.Close() + flateWriter.Write(data) + default: + w.Write(data) + } +} |