Gin Web 框架(Golang)中 StaticFS 服务器的缓存控制

问题描述 投票:0回答:1

我正在使用 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 仓库

go browser-cache go-gin static-files
1个回答
0
投票

我通过添加静态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")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.