aboutsummaryrefslogtreecommitdiff
path: root/app/router.go
diff options
context:
space:
mode:
authorjet2tlf <jet2tlf@gmail.com>2024-06-03 17:09:52 +0000
committerjet2tlf <jet2tlf@gmail.com>2024-06-03 17:09:52 +0000
commitb144fa25a8a3cf325689c8c73236ab649b7a69d4 (patch)
tree03f5a4746620d4810a1e3e2356087aaf101cbdb4 /app/router.go
parente38ce6af1c520d43f9c1549de33b493b03f623c9 (diff)
downloadhttp-server-go-master.tar.gz
http-server-go-master.zip
codecrafters submit [skip ci]HEADmaster
Diffstat (limited to 'app/router.go')
-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())