25 lines
498 B
Go
25 lines
498 B
Go
|
package web
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func CachedServeFunc(h http.HandlerFunc) http.HandlerFunc {
|
||
|
var etag = fmt.Sprintf(`"%d"`, time.Now().UnixMicro())
|
||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||
|
if match := r.Header.Get("If-None-Match"); match != "" {
|
||
|
if strings.Contains(match, etag) {
|
||
|
w.WriteHeader(http.StatusNotModified)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
w.Header().Set("Cache-Control", "max-age=60")
|
||
|
w.Header().Set("ETag", etag)
|
||
|
h.ServeHTTP(w, r)
|
||
|
}
|
||
|
}
|