fix(httpcache): raw files return 304 after a change when the new commit is older (#39435)

This commit is contained in:
breken authored and GitHub committed 2026-10-04 13:13:24 +00:00
1 parent db7d1da28f
commit 6809ecf2d2
2 files changed
+16 -1

No files matched your search

+3 -1
View File
@@ -99,7 +99,9 @@ func handleGenericETagTimeCache(req *http.Request, w http.ResponseWriter, etag s
return true
}
}
if lastModified != nil && !lastModified.IsZero() {
// https://www.rfc-editor.org/rfc/rfc9110#section-13.1.3
// A recipient MUST ignore If-Modified-Since if the request contains an If-None-Match header field
if lastModified != nil && !lastModified.IsZero() && req.Header.Get("If-None-Match") == "" {
ifModifiedSince := req.Header.Get("If-Modified-Since")
if ifModifiedSince != "" {
t, err := time.Parse(http.TimeFormat, ifModifiedSince)
+13
View File
@@ -76,6 +76,19 @@ func TestHandleGenericETagCache(t *testing.T) {
wantHeaders: map[string]string{"Last-Modified": lastModified, "Cache-Control": "", "Etag": weakEtag},
wantStatus: http.StatusNotModified,
},
{
name: "If-Modified-Since without If-None-Match",
reqHeaders: map[string]string{"If-Modified-Since": lastModified},
wantHandled: true,
wantHeaders: map[string]string{"Last-Modified": lastModified, "Cache-Control": "", "Etag": matchedEtag},
wantStatus: http.StatusNotModified,
},
{
name: "Mismatched If-None-Match takes precedence over If-Modified-Since",
reqHeaders: map[string]string{"If-None-Match": `"mismatched-etag"`, "If-Modified-Since": lastModified},
wantHandled: false,
wantHeaders: map[string]string{"Last-Modified": lastModified, "Cache-Control": cacheControl, "Etag": matchedEtag},
},
{
name: "Multiple Matched If-None-Match",
reqHeaders: map[string]string{"If-None-Match": `"mismatched-etag", ` + matchedEtag},