From 9008599975227eb2c416f27a6afed79ca0e490e2 Mon Sep 17 00:00:00 2001 From: David Baynard Date: Thu, 9 Nov 2023 03:19:49 +0000 Subject: [PATCH] Write (deferred) headers Unlike `ResponseWriter.Write`, `io.Copy` doesn't add the deferred headers. Deferred headers are applied _after_ the proxied response. This (not standalong) is CORS configuration, for example, that only works with the change. ```Caddyfile header { Access-Control-Allow-Origin "{re.origin.0}" Access-Control-Allow-Credentials true Access-Control-Expose-Headers "{args[1]}" Vary Origin defer } ``` --- s3proxy.go | 1 + 1 file changed, 1 insertion(+) diff --git a/s3proxy.go b/s3proxy.go index 281acb5..bec2cfc 100644 --- a/s3proxy.go +++ b/s3proxy.go @@ -332,6 +332,7 @@ func (p S3Proxy) writeResponseFromGetObject(w http.ResponseWriter, obj *s3.GetOb if obj.Body != nil { // io.Copy will set Content-Length w.Header().Del("Content-Length") + w.WriteHeader(http.StatusOK) _, err = io.Copy(w, obj.Body) }