14199: Store data if X-Keep-Signature given in proxied GET/HEAD req.
[arvados.git] / services / keepstore / handlers.go
index 2426c9cbdacd4044a4c2fab06f4ee51edef2b4e9..2210c8c6ddf51f28d43d0026279727f854400e59 100644 (file)
@@ -101,9 +101,14 @@ func (rtr *router) handleGET(resp http.ResponseWriter, req *http.Request) {
        ctx, cancel := contextForResponse(context.TODO(), resp)
        defer cancel()
 
+       // Intervening proxies must not return a cached GET response
+       // to a prior request if a X-Keep-Signature request header has
+       // been added or changed.
+       resp.Header().Add("Vary", "X-Keep-Signature")
+
        locator := req.URL.Path[1:]
        if strings.Contains(locator, "+R") && !strings.Contains(locator, "+A") {
-               rtr.remoteProxy.Get(resp, req, rtr.cluster)
+               rtr.remoteProxy.Get(ctx, resp, req, rtr.cluster)
                return
        }