aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/router.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/app/router.go b/app/router.go
index 9296de2..01e49d1 100644
--- a/app/router.go
+++ b/app/router.go
@@ -2,11 +2,14 @@ package main
import (
"bufio"
+ "bytes"
+ "compress/gzip"
"fmt"
"io"
"net"
"regexp"
"slices"
+ "strconv"
"strings"
)
@@ -28,7 +31,20 @@ func (r *Router) handler(request *Request) func(*Request) *Response {
func (r *Router) write(writer io.Writer, response *Response, request *Request) (err error) {
if slices.Contains(strings.Split(request.Header("Accept-Encoding"), ", "), "gzip") {
+ var b bytes.Buffer
+
+ gz := gzip.NewWriter(&b)
+ if _, err := gz.Write(response.body); err != nil {
+ panic(err)
+ }
+
+ if err := gz.Close(); err != nil {
+ panic(err)
+ }
+
+ response.headers["Content-Length"] = strconv.Itoa(b.Len())
response.headers["Content-Encoding"] = "gzip"
+ response.body = b.Bytes()
}
_, err = writer.Write(response.StatusLine())