aboutsummaryrefslogtreecommitdiffhomepage
path: root/http/response/response.go
diff options
context:
space:
mode:
Diffstat (limited to 'http/response/response.go')
-rw-r--r--http/response/response.go23
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)
+ }
+}