diff --git a/generic-handlers.go b/generic-handlers.go index cda47469c..13c01437c 100644 --- a/generic-handlers.go +++ b/generic-handlers.go @@ -93,6 +93,23 @@ func parseDate(req *http.Request) (time.Time, error) { return time.Time{}, errors.New("invalid request") } +// Adds Cache-Control header +type cacheControlHandler struct { + handler http.Handler +} + +func setCacheControlHandler(h http.Handler) http.Handler { + return cacheControlHandler{h} +} + +func (h cacheControlHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Method == "GET" { + // expire the cache in one week + w.Header().Set("Cache-Control", "public, max-age=604800") + } + h.handler.ServeHTTP(w, r) +} + // TimeValidityHandler to validate parsable time over http header func TimeValidityHandler(h http.Handler) http.Handler { return timeHandler{h} diff --git a/routers.go b/routers.go index d9f4f05c5..c368fcec2 100644 --- a/routers.go +++ b/routers.go @@ -55,9 +55,10 @@ type WebAPI struct { func getWebAPIHandler(web *WebAPI) http.Handler { var mwHandlers = []MiddlewareHandler{ - TimeValidityHandler, // Validate time. - AuthHandler, // Authentication handler for verifying tokens. - CorsHandler, // CORS added only for testing purposes. + setCacheControlHandler, // Adds Cache-Control header + TimeValidityHandler, // Validate time. + AuthHandler, // Authentication handler for verifying tokens. + CorsHandler, // CORS added only for testing purposes. } if web.AccessLog { mwHandlers = append(mwHandlers, AccessLogHandler)