diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-10-24 14:36:38 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-10-24 14:36:38 +0200 |
commit | 0e18f25fe4b7df72d602c377c3b97afe06993a7f (patch) | |
tree | a27da06d5c05de48458a7f24583c2affe0696f51 /container-core/src/main/java/com | |
parent | fa29e75a71b49fc3925349457bb43de03b6d60d8 (diff) |
Fallback to 'Host' header for invalid requests using relative path
Diffstat (limited to 'container-core/src/main/java/com')
-rw-r--r-- | container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java index 3506d8b991f..13a63efeaa9 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java @@ -76,7 +76,7 @@ class AccessLogRequestLog extends AbstractLifeCycle implements org.eclipse.jetty addNonNullValue(builder, request.getProtocol(), RequestLogEntry.Builder::httpVersion); addNonNullValue(builder, request.getScheme(), RequestLogEntry.Builder::scheme); addNonNullValue(builder, request.getHeader("User-Agent"), RequestLogEntry.Builder::userAgent); - addNonNullValue(builder, request.getServerName(), RequestLogEntry.Builder::hostString); + addNonNullValue(builder, getServerName(request), RequestLogEntry.Builder::hostString); addNonNullValue(builder, request.getHeader("Referer"), RequestLogEntry.Builder::referer); addNonNullValue(builder, request.getQueryString(), RequestLogEntry.Builder::rawQuery); @@ -131,6 +131,19 @@ class AccessLogRequestLog extends AbstractLifeCycle implements org.eclipse.jetty } } + private static String getServerName(Request request) { + try { + return request.getServerName(); + } catch (IllegalArgumentException e) { + /* + * getServerName() may throw IllegalArgumentException for invalid requests where request line contains a URI with relative path. + * Jetty correctly responds with '400 Bad Request' prior to invoking our request log implementation. + */ + logger.log(Level.FINE, e, () -> "Fallback to 'Host' header"); + return request.getHeader("Host"); + } + } + private String getRemoteAddress(HttpServletRequest request) { for (String header : remoteAddressHeaders) { String value = request.getHeader(header); |