aboutsummaryrefslogtreecommitdiff
path: root/echo/middleware/cache_headers_middleware.go
diff options
context:
space:
mode:
Diffstat (limited to 'echo/middleware/cache_headers_middleware.go')
-rw-r--r--echo/middleware/cache_headers_middleware.go20
1 files changed, 17 insertions, 3 deletions
diff --git a/echo/middleware/cache_headers_middleware.go b/echo/middleware/cache_headers_middleware.go
index f168dfd..73df9b2 100644
--- a/echo/middleware/cache_headers_middleware.go
+++ b/echo/middleware/cache_headers_middleware.go
@@ -10,19 +10,33 @@ import (
10) 10)
11 11
12var ( 12var (
13 CacheNeverMiddleware = CacheHeadersMiddleware(0)
13 CacheOneHourMiddleware = CacheHeadersMiddleware(1 * time.Hour) 14 CacheOneHourMiddleware = CacheHeadersMiddleware(1 * time.Hour)
14 CacheOneDayMiddleware = CacheHeadersMiddleware(1 * gltime.Day) 15 CacheOneDayMiddleware = CacheHeadersMiddleware(1 * gltime.Day)
15 CacheOneMonthMiddleware = CacheHeadersMiddleware(30 * gltime.Day) 16 CacheOneMonthMiddleware = CacheHeadersMiddleware(30 * gltime.Day)
16) 17)
17 18
19func setHeaderMissing(c echo.Context, name string, value string) {
20 h := c.Response().Header()
21 if v := h.Get(name); v == "" {
22 h.Set(name, value)
23 }
24}
25
18func CacheHeadersMiddleware(d time.Duration) echo.MiddlewareFunc { 26func CacheHeadersMiddleware(d time.Duration) echo.MiddlewareFunc {
19 ds := int(d.Seconds()) 27 ds := int(d.Seconds())
20 28
21 return func(next echo.HandlerFunc) echo.HandlerFunc { 29 return func(next echo.HandlerFunc) echo.HandlerFunc {
22 return func(c echo.Context) error { 30 return func(c echo.Context) error {
23 c.Response().Header().Set("Vary", "Accept-Encoding") 31 c.Response().Header().Add(echo.HeaderVary, "Accept-Encoding")
24 c.Response().Header().Set("Cache-Control", fmt.Sprintf("public, max-age=%d", ds)) 32
25 c.Response().Header().Set("Expires", time.Now().Add(d).Format(time.RFC1123)) 33 if ds == 0 {
34 setHeaderMissing(c, "Cache-Control", "private, max-age=0, no-cache, no-store")
35 setHeaderMissing(c, "Expires", time.Now().Add(-time.Hour).Format(time.RFC1123))
36 } else {
37 setHeaderMissing(c, "Cache-Control", fmt.Sprintf("public, max-age=%d", ds))
38 setHeaderMissing(c, "Expires", time.Now().Add(d).Format(time.RFC1123))
39 }
26 return next(c) 40 return next(c)
27 } 41 }
28 } 42 }