diff options
| author | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 17:09:52 +0000 |
|---|---|---|
| committer | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 17:09:52 +0000 |
| commit | b144fa25a8a3cf325689c8c73236ab649b7a69d4 (patch) | |
| tree | 03f5a4746620d4810a1e3e2356087aaf101cbdb4 /app/router.go | |
| parent | e38ce6af1c520d43f9c1549de33b493b03f623c9 (diff) | |
| download | http-server-go-b144fa25a8a3cf325689c8c73236ab649b7a69d4.tar.gz http-server-go-b144fa25a8a3cf325689c8c73236ab649b7a69d4.zip | |
Diffstat (limited to 'app/router.go')
| -rw-r--r-- | app/router.go | 16 |
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()) |