Fix url scheme using for forwarded request with changed proto (#6884)

This commit is contained in:
Alexey
2025-06-16 22:50:09 +03:00
committed by GitHub
parent 78069605a6
commit 29d1701c34

View File

@@ -719,9 +719,11 @@ func extractHostHeader(r *http.Request) string {
forwardedHost := r.Header.Get("X-Forwarded-Host") forwardedHost := r.Header.Get("X-Forwarded-Host")
forwardedPort := r.Header.Get("X-Forwarded-Port") forwardedPort := r.Header.Get("X-Forwarded-Port")
forwardedProto := r.Header.Get("X-Forwarded-Proto")
// If X-Forwarded-Host is set, use that as the host. // 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 X-Forwarded-Port is set, use that too to form the host.
// If X-Forwarded-Proto is set, check if is it default to omit the port.
if forwardedHost != "" { if forwardedHost != "" {
extractedHost := forwardedHost extractedHost := forwardedHost
host, port, err := net.SplitHostPort(extractedHost) host, port, err := net.SplitHostPort(extractedHost)
@@ -731,7 +733,11 @@ func extractHostHeader(r *http.Request) string {
forwardedPort = port forwardedPort = port
} }
} }
if !isDefaultPort(r.URL.Scheme, forwardedPort) { scheme := r.URL.Scheme
if forwardedProto != "" {
scheme = forwardedProto
}
if !isDefaultPort(scheme, forwardedPort) {
extractedHost = net.JoinHostPort(extractedHost, forwardedPort) extractedHost = net.JoinHostPort(extractedHost, forwardedPort)
} }
return extractedHost return extractedHost