Static asset caching

This commit is contained in:
soup 2024-11-15 14:03:04 -05:00
parent 600f105b00
commit 921bf66d20

View file

@ -5,6 +5,7 @@ import (
"net/http"
"shelves/backend/httpx"
"strings"
"time"
"shelves"
)
@ -28,9 +29,28 @@ func redirectSetup(next http.Handler) http.Handler {
})
}
func ServeStatic() http.Handler {
inner := http.StripPrefix("/static/", http.FileServerFS(shelves.Frontend))
startup := time.Now().UTC()
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ims := r.Header.Get("If-Modified-Since")
imsTime, _ := time.Parse(http.TimeFormat, ims)
imsTime = imsTime.Add(time.Second * 10)
if imsTime.Before(startup) {
w.Header().Add("Last-Modified", startup.Format(http.TimeFormat))
w.Header().Add("Cache-Control", "public, max-age=0, stale-while-revalidate=9999999")
inner.ServeHTTP(w, r)
} else {
w.WriteHeader(http.StatusNotModified)
}
})
}
func Routes() http.Handler {
mux := http.NewServeMux()
mux.Handle("GET /static/", http.StripPrefix("/static/", http.FileServerFS(shelves.Frontend)))
mux.Handle("GET /static/", ServeStatic())
mux.HandleFunc("GET /{$}", HomeGet)
mux.HandleFunc("GET /setup", SetupGet)
mux.HandleFunc("POST /setup", SetupPost)