From 89dc16ae0999955699c16b26fbef80d64504c172 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Tue, 13 Oct 2020 10:27:01 -0500 Subject: [PATCH] Issue #5443 - Forwarding Headers are optional Cleanup handling of forwarded.authority Signed-off-by: Joakim Erdfelt --- .../server/ForwardedRequestCustomizer.java | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java index 9f34c4066645..f43ddfecfaba 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java @@ -498,36 +498,37 @@ else if (forwarded._secureScheme) request.setScheme(config.getSecureScheme()); } - // Set authority - String host = null; - int port = -1; - // Use authority from headers, if configured. if (forwarded._authority != null) { - host = forwarded._authority._host; - port = forwarded._authority._port; - } + String host = forwarded._authority._host; + int port = forwarded._authority._port; - // Fall back to request metadata if needed. - HttpURI requestURI = request.getMetaData().getURI(); - if (host == null) - { - host = requestURI.getHost(); - } - if (port == MutableHostPort.UNSET) // is unset by headers - { - port = requestURI.getPort(); - } - // Don't change port if port == IMPLIED. + HttpURI requestURI = request.getMetaData().getURI(); - // Update authority if different from metadata - if (requestURI != null && host != null && - (!host.equalsIgnoreCase(requestURI.getHost()) || - port != requestURI.getPort())) - { - httpFields.put(new HostPortHttpField(host, port)); - request.setAuthority(host, port); + if (requestURI != null) + { + // Fall back to request metadata if needed. + if (host == null) + { + host = requestURI.getHost(); + } + + if (port == MutableHostPort.UNSET) // is unset by headers + { + port = requestURI.getPort(); + } + + // Don't change port if port == IMPLIED. + + // Update authority if different from metadata + if (!host.equalsIgnoreCase(requestURI.getHost()) || + port != requestURI.getPort()) + { + httpFields.put(new HostPortHttpField(host, port)); + request.setAuthority(host, port); + } + } } // Set Remote Address