Merge pull request #339 from prymitive/static-expires

feat(backend): set caching headers for all static files
This commit is contained in:
Łukasz Mierzwa
2018-12-27 21:59:45 +01:00
committed by GitHub
2 changed files with 16 additions and 4 deletions

View File

@@ -7,6 +7,7 @@ import (
"net/http"
"os"
"strings"
"time"
assetfs "github.com/elazarl/go-bindata-assetfs"
"github.com/gin-gonic/gin"
@@ -76,7 +77,7 @@ func loadTemplate(t *template.Template, path string) *template.Template {
return t
}
func serverFileOrEmpty(path string, contentType string, c *gin.Context) {
func serveFileOr404(path string, contentType string, c *gin.Context) {
if path == "" {
c.Data(200, contentType, nil)
return
@@ -87,3 +88,13 @@ func serverFileOrEmpty(path string, contentType string, c *gin.Context) {
}
c.File(path)
}
func staticHeaders(prefix string) gin.HandlerFunc {
return func(c *gin.Context) {
if strings.HasPrefix(c.Request.URL.Path, prefix) {
c.Header("Cache-Control", "public, max-age=2592000")
expiresTime := time.Now().AddDate(0, 0, 30).Format(http.TimeFormat)
c.Header("Expires", expiresTime)
}
}
}

View File

@@ -19,11 +19,11 @@ import (
"github.com/gin-contrib/static"
"github.com/gin-gonic/contrib/sentry"
"github.com/gin-gonic/gin"
"github.com/patrickmn/go-cache"
"github.com/spf13/pflag"
raven "github.com/getsentry/raven-go"
ginprometheus "github.com/mcuadros/go-gin-prometheus"
cache "github.com/patrickmn/go-cache"
log "github.com/sirupsen/logrus"
)
@@ -55,6 +55,7 @@ func getViewURL(sub string) string {
func setupRouter(router *gin.Engine) {
router.Use(gzip.Gzip(gzip.DefaultCompression))
router.Use(staticHeaders(getViewURL("/static/")))
router.Use(static.Serve(getViewURL("/"), staticBuildFileSystem))
// next 2 lines are to allow service raw sources so sentry can fetch source maps
router.Use(static.Serve(getViewURL("/static/js/"), staticSrcFileSystem))
@@ -87,10 +88,10 @@ func setupRouter(router *gin.Engine) {
router.GET(getViewURL("/labelValues.json"), knownLabelValues)
router.GET(getViewURL("/custom.css"), func(c *gin.Context) {
serverFileOrEmpty(config.Config.Custom.CSS, "text/css", c)
serveFileOr404(config.Config.Custom.CSS, "text/css", c)
})
router.GET(getViewURL("/custom.js"), func(c *gin.Context) {
serverFileOrEmpty(config.Config.Custom.JS, "application/javascript", c)
serveFileOr404(config.Config.Custom.JS, "application/javascript", c)
})
router.NoRoute(notFound)