I am not sure, how in Golang we can leverage browser caching for only static files like CSS
, js
and not HTML
template file.
With .htaccess
in Apache, it used to be easy, but I don't see any such thing in golang
I want to know, any hack or method available where I can cache static files like css
, js
without using cloudflare - My app does not work with cloudflare.
Browser caching is controlled by headers sent by the server. This way it doesn’t depend on particular installed software.
You need to send headers Etag
and Cache-Control
. Like this
func Handler(w http.ResponseWriter, r *http.Request) {
e := "SomeKey describing content - eg checksum"
w.Header().Set("Etag", e)
w.Header().Set("Cache-Control", "max-age=2592000") // 30 days
if match := r.Header.Get("If-None-Match"); match != "" {
if strings.Contains(match, e) {
w.WriteHeader(http.StatusNotModified)
return
}
}
...
}
Useful links:
More details https://www.sanarias.com/blog/115LearningHTTPcachinginGo
Middleware example https://github.com/dc0d/cache-control by Kaveh Shahbazian
Intro to HTTP caching and headers http://dev.mobify.com/blog/beginners-guide-to-http-cache-headers/