diff options
Diffstat (limited to 'echo/middleware/cache_headers_middleware.go')
-rw-r--r-- | echo/middleware/cache_headers_middleware.go | 20 |
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 | ||
12 | var ( | 12 | var ( |
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 | ||
19 | func 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 | |||
18 | func CacheHeadersMiddleware(d time.Duration) echo.MiddlewareFunc { | 26 | func 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 | } |