// HTTPCachingHandler middleware that provides HTTP level caching // using the If-None-Match header. If the value of this header contains // a matching CurrentSHA this handler will write a 304 status and return. func HTTPCachingHandler(dcdr client.IFace) func(http.Handler) http.Handler { return func(h http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { if sha := dcdr.Info().CurrentSHA; sha != "" { w.Header().Set(EtagHeader, sha) } if date := dcdr.Info().LastModifiedDate; date != 0 { lmd := time.Unix(date, 0).Format(time.RFC1123) w.Header().Set(LastModifiedHeader, lmd) } SetCacheHeaders(w, r) if NotModified(dcdr.Info().CurrentSHA, r) { w.WriteHeader(http.StatusNotModified) return } h.ServeHTTP(w, r) } return http.HandlerFunc(fn) } }