From 267b14f342df696fda52402d4f8c28a3a2c9f41b Mon Sep 17 00:00:00 2001 From: Adin Schmahmann Date: Tue, 18 Jul 2023 14:17:44 -0400 Subject: [PATCH] fix: handle _redirects for If-None-Match headers --- gateway/handler.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/gateway/handler.go b/gateway/handler.go index 8c1358553..ecf505617 100644 --- a/gateway/handler.go +++ b/gateway/handler.go @@ -703,9 +703,19 @@ func (i *handler) handleIfNoneMatch(w http.ResponseWriter, r *http.Request, rq * if ifNoneMatch := r.Header.Get("If-None-Match"); ifNoneMatch != "" { pathMetadata, err := i.backend.ResolvePath(r.Context(), rq.immutablePath) if err != nil { - err = fmt.Errorf("failed to resolve %s: %w", debugStr(rq.contentPath.String()), err) - i.webError(w, r, err, http.StatusInternalServerError) - return true + var forwardedPath ImmutablePath + var continueProcessing bool + if isWebRequest(rq.responseFormat) { + forwardedPath, continueProcessing = i.handleWebRequestErrors(w, r, rq.mostlyResolvedPath(), rq.immutablePath, rq.contentPath, err, rq.logger) + if continueProcessing { + pathMetadata, err = i.backend.ResolvePath(r.Context(), forwardedPath) + } + } + if !continueProcessing || err != nil { + err = fmt.Errorf("failed to resolve %s: %w", debugStr(rq.contentPath.String()), err) + i.webError(w, r, err, http.StatusInternalServerError) + return true + } } pathCid := pathMetadata.LastSegment.Cid()