From 2fcf17aa1dd7f0d46dc65ed2a1ccd35018b2f0c8 Mon Sep 17 00:00:00 2001 From: Daniele Tonon Date: Fri, 4 Aug 2023 15:40:30 +0200 Subject: [PATCH] Set Cache-Control to 60s on failed fetch This way we can permit a fast retry while keeping some control on DoS attacks --- render.go | 5 +++++ render_archive.go | 2 ++ render_relay.go | 2 ++ 3 files changed, 9 insertions(+) diff --git a/render.go b/render.go index ffb4e9f..a2f5477 100644 --- a/render.go +++ b/render.go @@ -57,6 +57,7 @@ func render(w http.ResponseWriter, r *http.Request) { if strings.HasPrefix(code, "note1") { _, redirectHex, err := nip19.Decode(code) if err != nil { + w.Header().Set("Cache-Control", "max-age=60") http.Error(w, "error fetching event: "+err.Error(), 404) return } @@ -75,6 +76,7 @@ func render(w http.ResponseWriter, r *http.Request) { // code can be a nevent, nprofile, npub or nip05 identifier, in which case we try to fetch the associated event event, err := getEvent(r.Context(), code) if err != nil { + w.Header().Set("Cache-Control", "max-age=60") http.Error(w, "error fetching event: "+err.Error(), 404) return } @@ -132,6 +134,7 @@ func render(w http.ResponseWriter, r *http.Request) { } } if err != nil { + w.Header().Set("Cache-Control", "max-age=60") http.Error(w, "error fetching event: "+err.Error(), 404) return } @@ -319,6 +322,8 @@ func render(w http.ResponseWriter, r *http.Request) { if (strings.Contains(typ, "profile") && len(renderableLastNotes) != 0) || (!strings.Contains(typ, "profile") && len(content) != 0) { w.Header().Set("Cache-Control", "max-age=604800") + } else { + w.Header().Set("Cache-Control", "max-age=60") } if err := tmpl.ExecuteTemplate(w, templateMapping[typ], params); err != nil { diff --git a/render_archive.go b/render_archive.go index 47829cd..5e29e60 100644 --- a/render_archive.go +++ b/render_archive.go @@ -66,6 +66,8 @@ func renderArchive(w http.ResponseWriter, r *http.Request) { if len(data) != 0 { w.Header().Set("Cache-Control", "max-age=86400") + } else { + w.Header().Set("Cache-Control", "max-age=60") } if err := tmpl.ExecuteTemplate(w, "archive.html", params); err != nil { diff --git a/render_relay.go b/render_relay.go index 6cad810..8514935 100644 --- a/render_relay.go +++ b/render_relay.go @@ -74,6 +74,8 @@ func renderRelayPage(w http.ResponseWriter, r *http.Request) { if len(renderableLastNotes) != 0 { w.Header().Set("Cache-Control", "max-age=604800") + } else { + w.Header().Set("Cache-Control", "max-age=60") } if err := tmpl.ExecuteTemplate(w, templateMapping[typ], params); err != nil {