mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-06-28 15:41:13 +08:00
use X-Forwarded-Host and X-Forwarded-Port to determine correct host for AWS signature (#6514)
This commit is contained in:
parent
68f547bdf2
commit
a250699225
@ -683,12 +683,8 @@ func extractSignedHeaders(signedHeaders []string, r *http.Request) (http.Header,
|
|||||||
// be sent, for the time being keep this work around.
|
// be sent, for the time being keep this work around.
|
||||||
extractedSignedHeaders.Set(header, "100-continue")
|
extractedSignedHeaders.Set(header, "100-continue")
|
||||||
case "host":
|
case "host":
|
||||||
// Go http server removes "host" from Request.Header
|
extractedHost := extractHostHeader(r)
|
||||||
if forwardedHost := r.Header.Get("X-Forwarded-Host"); forwardedHost != "" {
|
extractedSignedHeaders.Set(header, extractedHost)
|
||||||
extractedSignedHeaders.Set(header, forwardedHost)
|
|
||||||
} else {
|
|
||||||
extractedSignedHeaders.Set(header, r.Host)
|
|
||||||
}
|
|
||||||
case "transfer-encoding":
|
case "transfer-encoding":
|
||||||
for _, enc := range r.TransferEncoding {
|
for _, enc := range r.TransferEncoding {
|
||||||
extractedSignedHeaders.Add(header, enc)
|
extractedSignedHeaders.Add(header, enc)
|
||||||
@ -705,6 +701,25 @@ func extractSignedHeaders(signedHeaders []string, r *http.Request) (http.Header,
|
|||||||
return extractedSignedHeaders, s3err.ErrNone
|
return extractedSignedHeaders, s3err.ErrNone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func extractHostHeader(r *http.Request) string {
|
||||||
|
|
||||||
|
forwardedHost := r.Header.Get("X-Forwarded-Host")
|
||||||
|
forwardedPort := r.Header.Get("X-Forwarded-Port")
|
||||||
|
|
||||||
|
// If X-Forwarded-Host is set, use that as the host.
|
||||||
|
// If X-Forwarded-Port is set, use that too to form the host.
|
||||||
|
if forwardedHost != "" {
|
||||||
|
extractedHost := forwardedHost
|
||||||
|
if forwardedPort != "" {
|
||||||
|
extractedHost = forwardedHost + ":" + forwardedPort
|
||||||
|
}
|
||||||
|
return extractedHost
|
||||||
|
} else {
|
||||||
|
// Go http server removes "host" from Request.Header
|
||||||
|
return r.Host
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// getSignedHeaders generate a string i.e alphabetically sorted, semicolon-separated list of lowercase request header names
|
// getSignedHeaders generate a string i.e alphabetically sorted, semicolon-separated list of lowercase request header names
|
||||||
func getSignedHeaders(signedHeaders http.Header) string {
|
func getSignedHeaders(signedHeaders http.Header) string {
|
||||||
var headers []string
|
var headers []string
|
||||||
|
Loading…
Reference in New Issue
Block a user