diff options
author | 2023-02-13 12:58:22 +0100 | |
---|---|---|
committer | 2023-02-13 12:58:22 +0100 | |
commit | 041c8e695ec9246d6bb5436aa6e334c4ecda9ede (patch) | |
tree | d951e1756288fedc639c08357946ca8699b2795a /internal/api/fileserver.go | |
parent | [docs] Update user/admin settings docs (#1491) (diff) | |
download | gotosocial-041c8e695ec9246d6bb5436aa6e334c4ecda9ede.tar.xz |
[chore] Do cache-control in a less silly way to avoid writing header twice (#1481)
* do cache-control in a less silly way to avoid writing header twice
* add comment back in
Diffstat (limited to 'internal/api/fileserver.go')
-rw-r--r-- | internal/api/fileserver.go | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/internal/api/fileserver.go b/internal/api/fileserver.go index fe4a781c3..042936551 100644 --- a/internal/api/fileserver.go +++ b/internal/api/fileserver.go @@ -21,6 +21,7 @@ package api import ( "github.com/gin-gonic/gin" "github.com/superseriousbusiness/gotosocial/internal/api/fileserver" + "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/middleware" "github.com/superseriousbusiness/gotosocial/internal/processing" "github.com/superseriousbusiness/gotosocial/internal/router" @@ -30,21 +31,31 @@ type Fileserver struct { fileserver *fileserver.Module } +// maxAge returns an appropriate max-age value for the +// storage method that's being used. +// +// The default max-age is very long to reflect that we +// never host different files at the same URL (since +// ULIDs are generated per piece of media), so we can +// easily prevent clients having to fetch files repeatedly. +// +// If we're using non-proxying s3, however, the max age is +// significantly shorter, to ensure that clients don't +// cache redirect responses to expired pre-signed URLs. +func maxAge() string { + if config.GetStorageBackend() == "s3" && !config.GetStorageS3Proxy() { + return "max-age=86400" // 24h + } + + return "max-age=604800" // 7d +} + func (f *Fileserver) Route(r router.Router, m ...gin.HandlerFunc) { fileserverGroup := r.AttachGroup("fileserver") // attach middlewares appropriate for this group fileserverGroup.Use(m...) - fileserverGroup.Use( - // Since we'll never host different files at the same - // URL (bc the ULIDs are generated per piece of media), - // it's sensible and safe to use a long cache here, so - // that clients don't keep fetching files over + over again. - // - // Nevertheless, we should use 'private' to indicate - // that there might be media in there which are gated by ACLs. - middleware.CacheControl("private", "max-age=604800"), - ) + fileserverGroup.Use(middleware.CacheControl("private", maxAge())) f.fileserver.Route(fileserverGroup.Handle) } |