shithub: hugo

Download patch

ref: 0b34af216154367af7f53ce93d44e6b3d58c3f34
parent: c0370e0ee3f12efe5f82b219f56b5c71f04f2329
author: Bjørn Erik Pedersen <[email protected]>
date: Fri Sep 22 13:13:21 EDT 2017

Add noHttpCache to hugo server

Fixes #3897

--- a/commands/server.go
+++ b/commands/server.go
@@ -39,6 +39,7 @@
 	serverInterface   string
 	serverPort        int
 	serverWatch       bool
+	noHttpCache       bool
 )
 
 var serverCmd = &cobra.Command{
@@ -86,6 +87,7 @@
 	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 @@
 
 	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"))