diff options
author | Jakob Borg <jakob@kastelo.net> | 2023-08-23 13:39:14 +0200 |
---|---|---|
committer | Jakob Borg <jakob@kastelo.net> | 2023-08-23 13:39:14 +0200 |
commit | bdfef9010fe745f2029c65c582040f45fb848875 (patch) | |
tree | b8e23b89cd4ac45c1423eb5c7e21928c72fdb8d4 /cmd | |
parent | 467522d04d9e0f941c618dc7bd25e674b6638f9a (diff) | |
download | syncthing-bdfef9010fe745f2029c65c582040f45fb848875.tar.gz syncthing-bdfef9010fe745f2029c65c582040f45fb848875.zip |
cmd/stdiscosrv: Serve compressed responses
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/stdiscosrv/apisrv.go | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/cmd/stdiscosrv/apisrv.go b/cmd/stdiscosrv/apisrv.go index 1140e073d..06081287c 100644 --- a/cmd/stdiscosrv/apisrv.go +++ b/cmd/stdiscosrv/apisrv.go @@ -8,6 +8,7 @@ package main import ( "bytes" + "compress/gzip" "context" "crypto/tls" "encoding/base64" @@ -15,6 +16,7 @@ import ( "encoding/pem" "errors" "fmt" + io "io" "log" "math/rand" "net" @@ -220,12 +222,21 @@ func (s *apiSrv) handleGET(ctx context.Context, w http.ResponseWriter, req *http lookupRequestsTotal.WithLabelValues("success").Inc() - bs, _ := json.Marshal(announcement{ - Seen: time.Unix(0, rec.Seen), + w.Header().Set("Content-Type", "application/json") + var bw io.Writer = w + + // Use compression if the client asks for it + if strings.Contains(req.Header.Get("Accept-Encoding"), "gzip") { + w.Header().Set("Content-Encoding", "gzip") + gw := gzip.NewWriter(bw) + defer gw.Close() + bw = gw + } + + json.NewEncoder(bw).Encode(announcement{ + Seen: time.Unix(0, rec.Seen).Truncate(time.Second), Addresses: addressStrs(rec.Addresses), }) - w.Header().Set("Content-Type", "application/json") - w.Write(bs) } func (s *apiSrv) handlePOST(ctx context.Context, remoteAddr *net.TCPAddr, w http.ResponseWriter, req *http.Request) { |