利用静态文件的浏览器缓存
Leverage browser caching for the static files
我不确定,在 Golang 中,我们如何利用浏览器缓存来仅针对 CSS
、js
之类的静态文件而不是 HTML
模板文件。
在 Apache 中使用 .htaccess
,它曾经很容易,但我在 golang
中没有看到任何这样的东西
我想知道,我可以缓存静态文件的任何技巧或方法,例如 css
、js
不使用 cloudflare - 我的应用不适用于 cloudflare。
你使用 golang 的事实并不意味着你不能使用像 ngnix 或 apache 这样的反向代理来处理浏览器缓存和其他你想要开箱即用的重要事情,而不必直接在你的 api
浏览器缓存由服务器发送的 headers 控制。这样它不依赖于特定安装的软件。
您需要发送 headers Etag
和 Cache-Control
。像这样
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
}
}
...
}
有用的链接:
我不确定,在 Golang 中,我们如何利用浏览器缓存来仅针对 CSS
、js
之类的静态文件而不是 HTML
模板文件。
在 Apache 中使用 .htaccess
,它曾经很容易,但我在 golang
我想知道,我可以缓存静态文件的任何技巧或方法,例如 css
、js
不使用 cloudflare - 我的应用不适用于 cloudflare。
你使用 golang 的事实并不意味着你不能使用像 ngnix 或 apache 这样的反向代理来处理浏览器缓存和其他你想要开箱即用的重要事情,而不必直接在你的 api
浏览器缓存由服务器发送的 headers 控制。这样它不依赖于特定安装的软件。
您需要发送 headers Etag
和 Cache-Control
。像这样
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
}
}
...
}
有用的链接: