diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-09-24 18:09:52 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-09-24 18:09:52 -0700 |
| commit | dbf5327b9874bf7137eb53cbe04cd362efeb864c (patch) | |
| tree | 0812cf8bc8bb12b2c77d328fe5b1fce93c15254d | |
| parent | 7726965a472fdb46b40f93f396bbb6c878b7fcd7 (diff) | |
| download | seaweedfs-dbf5327b9874bf7137eb53cbe04cd362efeb864c.tar.xz seaweedfs-dbf5327b9874bf7137eb53cbe04cd362efeb864c.zip | |
s3: handle response-content-encoding
fix https://github.com/chrislusf/seaweedfs/issues/1487
| -rw-r--r-- | weed/s3api/s3api_object_handlers.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go index bb03048c8..ea3cb47dd 100644 --- a/weed/s3api/s3api_object_handlers.go +++ b/weed/s3api/s3api_object_handlers.go @@ -210,6 +210,15 @@ func (s3a *S3ApiServer) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *h } +var passThroughHeaders = []string{ + "response-cache-control", + "response-content-disposition", + "response-content-encoding", + "response-content-language", + "response-content-type", + "response-expires", +} + func (s3a *S3ApiServer) proxyToFiler(w http.ResponseWriter, r *http.Request, destUrl string, responseFn func(proxyResponse *http.Response, w http.ResponseWriter)) { glog.V(2).Infof("s3 proxying %s to %s", r.Method, destUrl) @@ -226,6 +235,19 @@ func (s3a *S3ApiServer) proxyToFiler(w http.ResponseWriter, r *http.Request, des proxyReq.Header.Set("X-Forwarded-For", r.RemoteAddr) for header, values := range r.Header { + // handle s3 related headers + passed := false + for _, h := range passThroughHeaders { + if strings.ToLower(header) == h && len(values) > 0 { + proxyReq.Header.Add(header[len("response-"):], values[0]) + passed = true + break + } + } + if passed { + continue + } + // handle other headers for _, value := range values { proxyReq.Header.Add(header, value) } @@ -248,6 +270,7 @@ func (s3a *S3ApiServer) proxyToFiler(w http.ResponseWriter, r *http.Request, des responseFn(resp, w) } + func passThroughResponse(proxyResponse *http.Response, w http.ResponseWriter) { for k, v := range proxyResponse.Header { w.Header()[k] = v |
