diff --git a/internal/server/static_delivery.go b/internal/server/static_delivery.go index 9e7aa890..d801a72e 100644 --- a/internal/server/static_delivery.go +++ b/internal/server/static_delivery.go @@ -14,7 +14,6 @@ import ( "github.com/gin-gonic/gin" ) -//nolint:unused func addVary(header http.Header, value string) { for _, line := range header.Values("Vary") { for _, existing := range strings.Split(line, ",") { @@ -294,3 +293,32 @@ func (w *compressionWriter) writePlain(data []byte) (int, error) { //nolint:staticcheck return w.ResponseWriter.Write(data) } + +//nolint:unused +func (w *compressionWriter) startGzip() { + if w.mode != compressionUndecided { + return + } + w.mode = compressionGzip + w.Header().Del("Content-Length") + if etag := w.Header().Get("ETag"); etag != "" && !strings.HasPrefix(etag, "W/") { + w.Header().Set("ETag", "W/"+etag) + } + addVary(w.Header(), "Accept-Encoding") + w.Header().Set("Content-Encoding", "gzip") + w.ResponseWriter.WriteHeader(w.Status()) + w.gzip = gzip.NewWriter(w.ResponseWriter) +} + +//nolint:unused +func (w *compressionWriter) knownContentLength() (compress, known bool) { + contentLength := w.Header().Get("Content-Length") + if contentLength == "" { + return false, false + } + length, err := strconv.ParseInt(contentLength, 10, 64) + if err != nil { + return false, false + } + return length >= compressionMinLength, true +}