This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 11.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit d126a5c7203b2c52fb8097927d9f874ec2f9e8a7 Author: Mark Thomas <[email protected]> AuthorDate: Thu Sep 11 12:11:36 2025 +0100 Use constant for HEAD --- java/org/apache/catalina/authenticator/FormAuthenticator.java | 2 +- java/org/apache/catalina/connector/OutputBuffer.java | 3 ++- java/org/apache/catalina/filters/CorsFilter.java | 2 +- java/org/apache/catalina/filters/ExpiresFilter.java | 2 +- java/org/apache/catalina/servlets/CGIServlet.java | 6 +++--- java/org/apache/catalina/servlets/DefaultServlet.java | 4 ++-- java/org/apache/catalina/ssi/SSIServletExternalResolver.java | 3 ++- java/org/apache/coyote/ajp/AjpProcessor.java | 3 ++- java/org/apache/coyote/ajp/Constants.java | 2 +- java/org/apache/coyote/http11/Http11Processor.java | 3 ++- java/org/apache/coyote/http2/Stream.java | 3 ++- test/jakarta/servlet/http/HttpServletDoHeadBaseTest.java | 3 ++- test/org/apache/catalina/filters/TestCorsFilter.java | 2 +- test/org/apache/catalina/servlets/TestDefaultServletOptions.java | 2 +- .../catalina/servlets/TestDefaultServletRfc9110Section14.java | 3 ++- .../apache/catalina/servlets/TestWebdavServletOptionCollection.java | 2 +- test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java | 2 +- .../apache/catalina/servlets/TestWebdavServletOptionsUnknown.java | 2 +- test/org/apache/catalina/startup/TomcatBaseTest.java | 2 +- test/org/apache/coyote/ajp/SimpleAjpClient.java | 4 ++-- test/org/apache/coyote/http2/Http2TestBase.java | 2 +- 21 files changed, 32 insertions(+), 25 deletions(-) diff --git a/java/org/apache/catalina/authenticator/FormAuthenticator.java b/java/org/apache/catalina/authenticator/FormAuthenticator.java index af48c9ea9c..55d26f0764 100644 --- a/java/org/apache/catalina/authenticator/FormAuthenticator.java +++ b/java/org/apache/catalina/authenticator/FormAuthenticator.java @@ -586,7 +586,7 @@ public class FormAuthenticator extends AuthenticatorBase { String method = saved.getMethod(); MimeHeaders rmh = request.getCoyoteRequest().getMimeHeaders(); rmh.recycle(); - boolean cacheable = Method.GET.equals(method) || "HEAD".equals(method); + boolean cacheable = Method.GET.equals(method) || Method.HEAD.equals(method); Iterator<String> names = saved.getHeaderNames(); while (names.hasNext()) { String name = names.next(); diff --git a/java/org/apache/catalina/connector/OutputBuffer.java b/java/org/apache/catalina/connector/OutputBuffer.java index b44fbf4a83..c3e58136ff 100644 --- a/java/org/apache/catalina/connector/OutputBuffer.java +++ b/java/org/apache/catalina/connector/OutputBuffer.java @@ -33,6 +33,7 @@ import org.apache.coyote.CloseNowException; import org.apache.coyote.Response; import org.apache.tomcat.util.buf.C2BConverter; import org.apache.tomcat.util.buf.CharsetHolder; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.res.StringManager; /** @@ -227,7 +228,7 @@ public class OutputBuffer extends Writer { // AND // - some content has been written OR this is NOT a HEAD request if (!coyoteResponse.isCommitted() && coyoteResponse.getContentLengthLong() == -1 && - (bb.remaining() > 0 || !"HEAD".equals(coyoteResponse.getRequest().getMethod()))) { + (bb.remaining() > 0 || !Method.HEAD.equals(coyoteResponse.getRequest().getMethod()))) { coyoteResponse.setContentLength(bb.remaining()); } diff --git a/java/org/apache/catalina/filters/CorsFilter.java b/java/org/apache/catalina/filters/CorsFilter.java index 28ea339534..7f01a27022 100644 --- a/java/org/apache/catalina/filters/CorsFilter.java +++ b/java/org/apache/catalina/filters/CorsFilter.java @@ -565,7 +565,7 @@ public class CorsFilter extends GenericFilter { } return CORSRequestType.ACTUAL; case Method.GET: - case "HEAD": + case Method.HEAD: return CORSRequestType.SIMPLE; case Method.POST: String mediaType = MediaType.parseMediaTypeOnly(request.getContentType()); diff --git a/java/org/apache/catalina/filters/ExpiresFilter.java b/java/org/apache/catalina/filters/ExpiresFilter.java index 67e86620e0..17767fa5dd 100644 --- a/java/org/apache/catalina/filters/ExpiresFilter.java +++ b/java/org/apache/catalina/filters/ExpiresFilter.java @@ -1368,7 +1368,7 @@ public class ExpiresFilter extends FilterBase { // Don't add cache headers unless the request is a GET or a HEAD request String method = request.getMethod(); - if (!Method.GET.equals(method) && !"HEAD".equals(method)) { + if (!Method.GET.equals(method) && !Method.HEAD.equals(method)) { if (log.isDebugEnabled()) { log.debug(sm.getString("expiresFilter.invalidMethod", request.getRequestURI(), method)); } diff --git a/java/org/apache/catalina/servlets/CGIServlet.java b/java/org/apache/catalina/servlets/CGIServlet.java index c25ab45c3c..db0d31bd17 100644 --- a/java/org/apache/catalina/servlets/CGIServlet.java +++ b/java/org/apache/catalina/servlets/CGIServlet.java @@ -217,7 +217,7 @@ public final class CGIServlet extends HttpServlet { private static final String ALLOW_ANY_PATTERN = ".*"; static { - DEFAULT_SUPER_METHODS.add("HEAD"); + DEFAULT_SUPER_METHODS.add(Method.HEAD); DEFAULT_SUPER_METHODS.add("OPTIONS"); DEFAULT_SUPER_METHODS.add("TRACE"); @@ -734,8 +734,8 @@ public final class CGIServlet extends HttpServlet { // does not contain an unencoded "=" this is an indexed query. // The parsed query string becomes the command line parameters // for the cgi command. - if (enableCmdLineArguments && (Method.GET.equals(req.getMethod()) || req.getMethod().equals(Method.POST) || - req.getMethod().equals("HEAD"))) { + if (enableCmdLineArguments && (Method.GET.equals(req.getMethod()) || Method.POST.equals(req.getMethod()) || + Method.HEAD.equals(req.getMethod()))) { String qs; if (isIncluded) { qs = (String) req.getAttribute(RequestDispatcher.INCLUDE_QUERY_STRING); diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java b/java/org/apache/catalina/servlets/DefaultServlet.java index 690602fb09..ee45b1858b 100644 --- a/java/org/apache/catalina/servlets/DefaultServlet.java +++ b/java/org/apache/catalina/servlets/DefaultServlet.java @@ -2257,7 +2257,7 @@ public class DefaultServlet extends HttpServlet { WebResource resource) { String method = request.getMethod(); - if (!Method.GET.equals(method) && !"HEAD".equals(method)) { + if (!Method.GET.equals(method) && !Method.HEAD.equals(method)) { return true; } @@ -2365,7 +2365,7 @@ public class DefaultServlet extends HttpServlet { // 304 Not Modified. // For every other method, 412 Precondition Failed is sent // back. - if (Method.GET.equals(request.getMethod()) || "HEAD".equals(request.getMethod())) { + if (Method.GET.equals(request.getMethod()) || Method.HEAD.equals(request.getMethod())) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader("ETag", resourceETag); } else { diff --git a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java index 4d2bdbc0b1..027ec098eb 100644 --- a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java +++ b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java @@ -38,6 +38,7 @@ import org.apache.catalina.connector.Connector; import org.apache.catalina.connector.Request; import org.apache.tomcat.util.buf.B2CConverter; import org.apache.tomcat.util.buf.UDecoder; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.RequestUtil; import org.apache.tomcat.util.res.StringManager; @@ -493,7 +494,7 @@ public class SSIServletExternalResolver implements SSIExternalResolver { * Make an assumption that an empty response is a failure. This is a problem if a truly empty file were * included, but not sure how else to tell. */ - if (retVal.isEmpty() && !req.getMethod().equals("HEAD")) { + if (retVal.isEmpty() && !Method.HEAD.equals(req.getMethod())) { throw new IOException(sm.getString("ssiServletExternalResolver.noFile", path)); } return retVal; diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java b/java/org/apache/coyote/ajp/AjpProcessor.java index 971fadff58..0a8728a14b 100644 --- a/java/org/apache/coyote/ajp/AjpProcessor.java +++ b/java/org/apache/coyote/ajp/AjpProcessor.java @@ -48,6 +48,7 @@ import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; import org.apache.tomcat.util.net.ApplicationBufferHandler; @@ -908,7 +909,7 @@ public class AjpProcessor extends AbstractProcessor { // Responses with certain status codes and/or methods are not permitted to include a response body. int statusCode = response.getStatus(); if (statusCode < 200 || statusCode == 204 || statusCode == 205 || statusCode == 304 || - "HEAD".equals(request.getMethod())) { + Method.HEAD.equals(request.getMethod())) { // No entity body swallowResponse = true; } diff --git a/java/org/apache/coyote/ajp/Constants.java b/java/org/apache/coyote/ajp/Constants.java index c979f2f9c7..7363c174f7 100644 --- a/java/org/apache/coyote/ajp/Constants.java +++ b/java/org/apache/coyote/ajp/Constants.java @@ -107,7 +107,7 @@ public final class Constants { // Translates integer codes to names of HTTP methods private static final String[] methodTransArray = - { "OPTIONS", Method.GET, "HEAD", Method.POST, Method.PUT, "DELETE", "TRACE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", + { "OPTIONS", Method.GET, Method.HEAD, Method.POST, Method.PUT, "DELETE", "TRACE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "MOVE", "LOCK", "UNLOCK", "ACL", "REPORT", "VERSION-CONTROL", "CHECKIN", "CHECKOUT", "UNCHECKOUT", "SEARCH", "MKWORKSPACE", "UPDATE", "LABEL", "MERGE", "BASELINE-CONTROL", "MKACTIVITY" }; diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 4ab60b22ab..fbcec9d461 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -55,6 +55,7 @@ import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.http.FastHttpDateFormat; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.http.parser.HttpParser; import org.apache.tomcat.util.http.parser.TokenList; @@ -890,7 +891,7 @@ public class Http11Processor extends AbstractProcessor { } } - boolean head = "HEAD".equals(request.getMethod()); + boolean head = Method.HEAD.equals(request.getMethod()); if (head) { // Any entity body, if present, should not be sent outputBuffer.addActiveFilter(outputFilters[Constants.VOID_FILTER]); diff --git a/java/org/apache/coyote/http2/Stream.java b/java/org/apache/coyote/http2/Stream.java index e79ae63e86..c12eed1f05 100644 --- a/java/org/apache/coyote/http2/Stream.java +++ b/java/org/apache/coyote/http2/Stream.java @@ -46,6 +46,7 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.http.parser.Host; import org.apache.tomcat.util.http.parser.Priority; @@ -364,7 +365,7 @@ class Stream extends AbstractNonZeroStream implements HeaderEmitter { case ":method": { if (coyoteRequest.getMethod() == null) { coyoteRequest.setMethod(value); - if ("HEAD".equals(value)) { + if (Method.HEAD.equals(value)) { configureVoidOutputFilter(); } } else { diff --git a/test/jakarta/servlet/http/HttpServletDoHeadBaseTest.java b/test/jakarta/servlet/http/HttpServletDoHeadBaseTest.java index bfd59f21a9..4bf271e7e8 100644 --- a/test/jakarta/servlet/http/HttpServletDoHeadBaseTest.java +++ b/test/jakarta/servlet/http/HttpServletDoHeadBaseTest.java @@ -41,6 +41,7 @@ import org.apache.catalina.startup.Tomcat; import org.apache.coyote.http2.Http2TestBase; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.collections.CaseInsensitiveKeyMap; +import org.apache.tomcat.util.http.Method; /* * Split into multiple tests as a single test takes so long it impacts the time @@ -256,7 +257,7 @@ public class HttpServletDoHeadBaseTest extends Http2TestBase { boolean resetBufferSize = false; if (Boolean.parseBoolean(getServletConfig().getInitParameter(LEGACY_DO_HEAD)) && - "HEAD".equals(req.getMethod()) && useWriter && resetType != ResetType.NONE) { + Method.HEAD.equals(req.getMethod()) && useWriter && resetType != ResetType.NONE) { /* * Using legacy HEAD handling with a Writer. * diff --git a/test/org/apache/catalina/filters/TestCorsFilter.java b/test/org/apache/catalina/filters/TestCorsFilter.java index 71308370d6..4d2e4712c5 100644 --- a/test/org/apache/catalina/filters/TestCorsFilter.java +++ b/test/org/apache/catalina/filters/TestCorsFilter.java @@ -110,7 +110,7 @@ public class TestCorsFilter { public void testDoFilterSimpleHEAD() throws IOException, ServletException { TesterHttpServletRequest request = new TesterHttpServletRequest(); request.setHeader(CorsFilter.REQUEST_HEADER_ORIGIN, TesterFilterConfigs.HTTPS_WWW_APACHE_ORG); - request.setMethod("HEAD"); + request.setMethod(Method.HEAD); TesterHttpServletResponse response = new TesterHttpServletResponse(); CorsFilter corsFilter = new CorsFilter(); diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptions.java index 53795940c6..b99d395941 100644 --- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java +++ b/test/org/apache/catalina/servlets/TestDefaultServletOptions.java @@ -34,7 +34,7 @@ public class TestDefaultServletOptions extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME }; - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE" }; + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java b/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java index 5a6d469be7..efd266f8a6 100644 --- a/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java +++ b/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java @@ -30,6 +30,7 @@ import org.apache.catalina.Context; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; import org.apache.tomcat.util.buf.ByteChunk; +import org.apache.tomcat.util.http.Method; public class TestDefaultServletRfc9110Section14 extends TomcatBaseTest { @@ -62,7 +63,7 @@ public class TestDefaultServletRfc9110Section14 extends TomcatBaseTest { Assert.assertTrue("Range requests is turn on, header `Accept-Ranges: bytes` is expected", responseHeaders.containsKey("Accept-Ranges") && responseHeaders.get("Accept-Ranges").contains("bytes")); - rc = methodUrl(path, responseBody, DEFAULT_CLIENT_TIMEOUT_MS, requestHeaders, responseHeaders, "HEAD"); + rc = methodUrl(path, responseBody, DEFAULT_CLIENT_TIMEOUT_MS, requestHeaders, responseHeaders, Method.HEAD); Assert.assertEquals("Range requests is turn on, SC_OK of HEAD is expected", HttpServletResponse.SC_OK, rc); Assert.assertTrue("Range requests is turn on, header `Accept-Ranges: bytes` is expected", responseHeaders.containsKey("Accept-Ranges") && responseHeaders.get("Accept-Ranges").contains("bytes")); diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java index 9ff5d248a3..fdc450949b 100644 --- a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java +++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java @@ -37,7 +37,7 @@ public class TestWebdavServletOptionCollection extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE", + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE", "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java index 88565011e6..ee2ef719f6 100644 --- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java +++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java @@ -37,7 +37,7 @@ public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE", + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE", "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java index 21e3024c8e..f01474ee33 100644 --- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java +++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java @@ -37,7 +37,7 @@ public class TestWebdavServletOptionsUnknown extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE", + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE", "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/startup/TomcatBaseTest.java b/test/org/apache/catalina/startup/TomcatBaseTest.java index d6192cfc29..4ec2d53177 100644 --- a/test/org/apache/catalina/startup/TomcatBaseTest.java +++ b/test/org/apache/catalina/startup/TomcatBaseTest.java @@ -660,7 +660,7 @@ public abstract class TomcatBaseTest extends LoggingBaseTest { public static int headUrl(String path, ByteChunk out, Map<String, List<String>> resHead) throws IOException { - return methodUrl(path, out, DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, "HEAD"); + return methodUrl(path, out, DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, Method.HEAD); } public static int getUrl(String path, ByteChunk out, Map<String, List<String>> reqHead, diff --git a/test/org/apache/coyote/ajp/SimpleAjpClient.java b/test/org/apache/coyote/ajp/SimpleAjpClient.java index c7d401df13..1a365e47a6 100644 --- a/test/org/apache/coyote/ajp/SimpleAjpClient.java +++ b/test/org/apache/coyote/ajp/SimpleAjpClient.java @@ -82,7 +82,7 @@ public class SimpleAjpClient { case Method.GET: this.method = 2; break; - case "HEAD": + case Method.HEAD: this.method = 3; break; case Method.POST: @@ -169,7 +169,7 @@ public class SimpleAjpClient { case 2: return Method.GET; case 3: - return "HEAD"; + return Method.HEAD; case 4: return Method.POST; case 5: diff --git a/test/org/apache/coyote/http2/Http2TestBase.java b/test/org/apache/coyote/http2/Http2TestBase.java index 590b2a93a0..902c8d747d 100644 --- a/test/org/apache/coyote/http2/Http2TestBase.java +++ b/test/org/apache/coyote/http2/Http2TestBase.java @@ -452,7 +452,7 @@ public abstract class Http2TestBase extends TomcatBaseTest { protected void buildHeadRequest(byte[] headersFrameHeader, ByteBuffer headersPayload, int streamId, String path) { MimeHeaders headers = new MimeHeaders(); - headers.addValue(":method").setString("HEAD"); + headers.addValue(":method").setString(Method.HEAD); headers.addValue(":scheme").setString("http"); headers.addValue(":path").setString(path); headers.addValue(":authority").setString("localhost:" + getPort()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
