From: Bjørn Erik Pedersen Date: Fri, 22 Sep 2017 15:13:21 +0000 (+0200) Subject: Add noHttpCache to hugo server X-Git-Tag: v0.28~18 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=0b34af216154367af7f53ce93d44e6b3d58c3f34;p=brevno-suite%2Fhugo Add noHttpCache to hugo server Fixes #3897 --- diff --git a/commands/server.go b/commands/server.go index 89d5c239..b6983c70 100644 --- a/commands/server.go +++ b/commands/server.go @@ -39,6 +39,7 @@ var ( serverInterface string serverPort int serverWatch bool + noHttpCache bool ) var serverCmd = &cobra.Command{ @@ -86,6 +87,7 @@ func init() { serverCmd.Flags().IntVarP(&serverPort, "port", "p", 1313, "port on which the server will listen") serverCmd.Flags().StringVarP(&serverInterface, "bind", "", "127.0.0.1", "interface to which the server will bind") serverCmd.Flags().BoolVarP(&serverWatch, "watch", "w", true, "watch filesystem for changes and recreate as needed") + serverCmd.Flags().BoolVar(&noHttpCache, "noHttpCache", false, "prevent HTTP caching") serverCmd.Flags().BoolVarP(&serverAppend, "appendPort", "", true, "append port to baseURL") serverCmd.Flags().BoolVar(&disableLiveReload, "disableLiveReload", false, "watch without enabling live browser reload on rebuild") serverCmd.Flags().BoolVar(&navigateToChanged, "navigateToChanged", false, "navigate to changed content file on live browser reload") @@ -205,7 +207,17 @@ func (c *commandeer) serve(port int) { httpFs := afero.NewHttpFs(c.Fs.Destination) fs := filesOnlyFs{httpFs.Dir(c.PathSpec().AbsPathify(c.Cfg.GetString("publishDir")))} - fileserver := http.FileServer(fs) + decorate := func(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if noHttpCache { + w.Header().Set("Cache-Control", " no-store, no-cache, must-revalidate, max-age=0") + w.Header().Set("Pragma", "no-cache") + } + h.ServeHTTP(w, r) + }) + } + + fileserver := decorate(http.FileServer(fs)) // We're only interested in the path u, err := url.Parse(c.Cfg.GetString("baseURL"))