From 1a4ea94805ad4e822a55e2389877a07523c0ae48 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Tue, 14 May 2019 13:42:48 -0400 Subject: [PATCH] When gzipping file responses add header for uncompressed content length (#10836) --- api4/file.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/api4/file.go b/api4/file.go index 5fe92b49e3..5a0da880ba 100644 --- a/api4/file.go +++ b/api4/file.go @@ -546,7 +546,7 @@ func getFile(c *Context, w http.ResponseWriter, r *http.Request) { } defer fileReader.Close() - err = writeFileResponse(info.Name, info.MimeType, info.Size, fileReader, forceDownload, w, r) + err = writeFileResponse(info.Name, info.MimeType, info.Size, *c.App.Config().ServiceSettings.WebserverMode, fileReader, forceDownload, w, r) if err != nil { c.Err = err return @@ -588,7 +588,7 @@ func getFileThumbnail(c *Context, w http.ResponseWriter, r *http.Request) { } defer fileReader.Close() - err = writeFileResponse(info.Name, THUMBNAIL_IMAGE_TYPE, 0, fileReader, forceDownload, w, r) + err = writeFileResponse(info.Name, THUMBNAIL_IMAGE_TYPE, 0, *c.App.Config().ServiceSettings.WebserverMode, fileReader, forceDownload, w, r) if err != nil { c.Err = err return @@ -663,7 +663,7 @@ func getFilePreview(c *Context, w http.ResponseWriter, r *http.Request) { } defer fileReader.Close() - err = writeFileResponse(info.Name, PREVIEW_IMAGE_TYPE, 0, fileReader, forceDownload, w, r) + err = writeFileResponse(info.Name, PREVIEW_IMAGE_TYPE, 0, *c.App.Config().ServiceSettings.WebserverMode, fileReader, forceDownload, w, r) if err != nil { c.Err = err return @@ -729,19 +729,24 @@ func getPublicFile(c *Context, w http.ResponseWriter, r *http.Request) { } defer fileReader.Close() - err = writeFileResponse(info.Name, info.MimeType, info.Size, fileReader, false, w, r) + err = writeFileResponse(info.Name, info.MimeType, info.Size, *c.App.Config().ServiceSettings.WebserverMode, fileReader, false, w, r) if err != nil { c.Err = err return } } -func writeFileResponse(filename string, contentType string, contentSize int64, fileReader io.Reader, forceDownload bool, w http.ResponseWriter, r *http.Request) *model.AppError { +func writeFileResponse(filename string, contentType string, contentSize int64, webserverMode string, fileReader io.Reader, forceDownload bool, w http.ResponseWriter, r *http.Request) *model.AppError { w.Header().Set("Cache-Control", "max-age=2592000, private") w.Header().Set("X-Content-Type-Options", "nosniff") if contentSize > 0 { - w.Header().Set("Content-Length", strconv.Itoa(int(contentSize))) + contentSizeStr := strconv.Itoa(int(contentSize)) + if webserverMode == "gzip" { + w.Header().Set("X-Uncompressed-Content-Length", contentSizeStr) + } else { + w.Header().Set("Content-Length", contentSizeStr) + } } if contentType == "" {