我正在使用 Gin 框架开发一个开源 Go 项目。我使用嵌入式模板和静态文件来构建可执行二进制文件。由于静态文件是嵌入的,因此它们不会更改,但静态文件不会被缓存,并且每次后续页面刷新都会导致静态 CSS 出现
HTTP Status 200
。该文档对于解决问题并没有真正的帮助。
如果我错过了什么,请提出建议。如何解决这个问题?
静态文件服务器:
//go:embed templates/tailwind/*
var templateFS embed.FS
//go:embed templates/static/*
var staticFiles embed.FS
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
tmpl := template.Must(template.ParseFS(templateFS, "templates/tailwind/*"))
r.SetHTMLTemplate(tmpl)
fs, _ := io.Sub(staticFiles, "templates/static")
r.StaticFS("/static/", http.FS(fs))
此外,我还尝试过启用缓存的 Firefox、Chrome、Safari 和 Chrome(移动版)
Go版本1.22.5 金酒版本1.10.0
GitHub 仓库
我通过添加静态FS服务器中默认不存在的缓存控制标头解决了这个问题。
更新的服务器:
//go:embed templates/tailwind/*
var templateFS embed.FS
//go:embed templates/static/*
var staticFiles embed.FS
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
tmpl := template.Must(template.ParseFS(templateFS, "templates/tailwind/*"))
r.SetHTMLTemplate(tmpl)
static := r.Group("/")
{
static.Use(cacheMiddleware())
fs, _ := io.Sub(staticFiles, "templates/static")
static.StaticFS("/static/", http.FS(fs))
}
中间件:
func cacheMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Cache-Control", "public, max-age=604800, immutable")
}
}