mirror of
https://github.com/writefreely/writefreely
synced 2024-11-24 01:23:04 +00:00
Add Cache-Control header
Add Cache-Control response header for static files in order to improve page loading speed. Fixes #322
This commit is contained in:
parent
a8a6525006
commit
3f36ede885
6 changed files with 53 additions and 0 deletions
8
cache.go
8
cache.go
|
@ -11,6 +11,7 @@
|
||||||
package writefreely
|
package writefreely
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -67,3 +68,10 @@ func GetPostsCache(userID int64) *[]PublicPost {
|
||||||
}
|
}
|
||||||
return pci.Posts
|
return pci.Posts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cacheControl(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Cache-Control", "public, max-age=604800, immutable")
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import (
|
||||||
func (app *App) InitStaticRoutes(r *mux.Router) {
|
func (app *App) InitStaticRoutes(r *mux.Router) {
|
||||||
// Handle static files
|
// Handle static files
|
||||||
fs := http.FileServer(http.Dir(filepath.Join(app.cfg.Server.StaticParentDir, staticDir)))
|
fs := http.FileServer(http.Dir(filepath.Join(app.cfg.Server.StaticParentDir, staticDir)))
|
||||||
|
fs = cacheControl(fs)
|
||||||
app.shttp = http.NewServeMux()
|
app.shttp = http.NewServeMux()
|
||||||
app.shttp.Handle("/", fs)
|
app.shttp.Handle("/", fs)
|
||||||
r.PathPrefix("/").Handler(fs)
|
r.PathPrefix("/").Handler(fs)
|
||||||
|
|
38
routes_test.go
Normal file
38
routes_test.go
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
package writefreely
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCacheControlForStaticFiles(t *testing.T) {
|
||||||
|
app := NewApp("testdata/config.ini")
|
||||||
|
if err := app.LoadConfig(); err != nil {
|
||||||
|
t.Fatalf("Could not create an app; %v", err)
|
||||||
|
}
|
||||||
|
router := mux.NewRouter()
|
||||||
|
app.InitStaticRoutes(router)
|
||||||
|
|
||||||
|
rec := httptest.NewRecorder()
|
||||||
|
req := httptest.NewRequest("GET", "/style.css", nil)
|
||||||
|
router.ServeHTTP(rec, req)
|
||||||
|
if code := rec.Result().StatusCode; code != http.StatusOK {
|
||||||
|
t.Fatalf("Could not get /style.css, got HTTP status %d", code)
|
||||||
|
}
|
||||||
|
actual := rec.Result().Header.Get("Cache-Control")
|
||||||
|
|
||||||
|
expectedDirectives := []string{
|
||||||
|
"public",
|
||||||
|
"max-age",
|
||||||
|
"immutable",
|
||||||
|
}
|
||||||
|
for _, expected := range expectedDirectives {
|
||||||
|
if !strings.Contains(actual, expected) {
|
||||||
|
t.Errorf("Expected Cache-Control header to contain '%s', but was '%s'", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
testdata/.gitignore
vendored
Normal file
1
testdata/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!config.ini
|
2
testdata/config.ini
vendored
Normal file
2
testdata/config.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[server]
|
||||||
|
static_parent_dir = testdata
|
3
testdata/static/style.css
vendored
Normal file
3
testdata/static/style.css
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body {
|
||||||
|
background-color: lightblue;
|
||||||
|
}
|
Loading…
Reference in a new issue