diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpCompliance.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpCompliance.java index 1995b959b2c..2d281b973b7 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpCompliance.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpCompliance.java @@ -105,8 +105,8 @@ public enum HttpCompliance // TODO in Jetty-10 convert this enum to a class so t case "RFC2616": sections = EnumSet.complementOf(EnumSet.of( - HttpComplianceSection.RFC7230_3_2_4_NO_FOLDING, - HttpComplianceSection.RFC7230_A2_NO_HTTP_9)); + HttpComplianceSection.NO_FIELD_FOLDING, + HttpComplianceSection.NO_HTTP_9)); i++; break; diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpComplianceSection.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpComplianceSection.java index 0f1b1a63f6a..fa74d9f2304 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpComplianceSection.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpComplianceSection.java @@ -22,13 +22,13 @@ package org.eclipse.jetty.http; */ public enum HttpComplianceSection { - USE_CASE_INSENSITIVE_FIELD_VALUE_CACHE("","Use case insensitive field value cache"), - RFC7230_3_1_1_METHOD_CASE_SENSITIVE("https://tools.ietf.org/html/rfc7230#section-3.1.1","Method is case-sensitive"), - RFC7230_3_2_FIELD_COLON("https://tools.ietf.org/html/rfc7230#section-3.2","Fields must have a Colon"), - RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME("https://tools.ietf.org/html/rfc7230#section-3.2","Field name is case-insensitive"), - RFC7230_3_2_4_NO_WS_AFTER_FIELD_NAME("https://tools.ietf.org/html/rfc7230#section-3.2.4","Whitespace not allowed after field name"), - RFC7230_3_2_4_NO_FOLDING("https://tools.ietf.org/html/rfc7230#section-3.2.4","No line Folding"), - RFC7230_A2_NO_HTTP_9("https://tools.ietf.org/html/rfc7230#appendix-A.2","No HTTP/0.9"), + CASE_INSENSITIVE_FIELD_VALUE_CACHE("","Use case insensitive field value cache"), + METHOD_CASE_SENSITIVE("https://tools.ietf.org/html/rfc7230#section-3.1.1","Method is case-sensitive"), + FIELD_COLON("https://tools.ietf.org/html/rfc7230#section-3.2","Fields must have a Colon"), + FIELD_NAME_CASE_INSENSITIVE("https://tools.ietf.org/html/rfc7230#section-3.2","Field name is case-insensitive"), + NO_WS_AFTER_FIELD_NAME("https://tools.ietf.org/html/rfc7230#section-3.2.4","Whitespace not allowed after field name"), + NO_FIELD_FOLDING("https://tools.ietf.org/html/rfc7230#section-3.2.4","No line Folding"), + NO_HTTP_9("https://tools.ietf.org/html/rfc7230#appendix-A.2","No HTTP/0.9"), ; final String url; diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java index d5dd19ccb8a..d6935718b2d 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java @@ -351,10 +351,10 @@ public class HttpParser /* ------------------------------------------------------------------------------- */ protected String caseInsensitiveHeader(String orig, String normative) { - if (_compliances.contains(HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME)) + if (_compliances.contains(HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE)) return normative; if (!orig.equals(normative)) - handleViolation(HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME,orig); + handleViolation(HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE,orig); return orig; } @@ -669,7 +669,7 @@ public class HttpParser _length=_string.length(); _methodString=takeString(); - if (_compliances.contains(HttpComplianceSection.RFC7230_3_1_1_METHOD_CASE_SENSITIVE)) + if (_compliances.contains(HttpComplianceSection.METHOD_CASE_SENSITIVE)) { HttpMethod method=HttpMethod.CACHE.get(_methodString); if (method!=null) @@ -682,7 +682,7 @@ public class HttpParser if (method!=null) { if (!method.asString().equals(_methodString)) - handleViolation(HttpComplianceSection.RFC7230_3_1_1_METHOD_CASE_SENSITIVE,_methodString); + handleViolation(HttpComplianceSection.METHOD_CASE_SENSITIVE,_methodString); _methodString = method.asString(); } } @@ -787,7 +787,7 @@ public class HttpParser else if (b < HttpTokens.SPACE && b>=0) { // HTTP/0.9 - if (complianceViolation(HttpComplianceSection.RFC7230_A2_NO_HTTP_9,"No request version")) + if (complianceViolation(HttpComplianceSection.NO_HTTP_9,"No request version")) throw new BadMessageException("HTTP/0.9 not supported"); handle=_requestHandler.startRequest(_methodString,_uri.toString(), HttpVersion.HTTP_0_9); setState(State.END); @@ -854,7 +854,7 @@ public class HttpParser else { // HTTP/0.9 - if (complianceViolation(HttpComplianceSection.RFC7230_A2_NO_HTTP_9,"No request version")) + if (complianceViolation(HttpComplianceSection.NO_HTTP_9,"No request version")) throw new BadMessageException("HTTP/0.9 not supported"); handle=_requestHandler.startRequest(_methodString,_uri.toString(), HttpVersion.HTTP_0_9); @@ -973,7 +973,7 @@ public class HttpParser if (!(_field instanceof HostPortHttpField) && _valueString!=null && !_valueString.isEmpty()) { _field=new HostPortHttpField(_header, - _compliances.contains(HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME)?_header.asString():_headerString, + _compliances.contains(HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE)?_header.asString():_headerString, _valueString); add_to_connection_trie=_fieldCache!=null; } @@ -1071,7 +1071,7 @@ public class HttpParser case HttpTokens.SPACE: case HttpTokens.TAB: { - if (complianceViolation(HttpComplianceSection.RFC7230_3_2_4_NO_FOLDING,_headerString)) + if (complianceViolation(HttpComplianceSection.NO_FIELD_FOLDING,_headerString)) throw new BadMessageException(HttpStatus.BAD_REQUEST_400,"Header Folding"); // header value without name - continuation? @@ -1190,24 +1190,24 @@ public class HttpParser String n = cached_field.getName(); String v = cached_field.getValue(); - if (!_compliances.contains(HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME)) + if (!_compliances.contains(HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE)) { // Have to get the fields exactly from the buffer to match case String en = BufferUtil.toString(buffer,buffer.position()-1,n.length(),StandardCharsets.US_ASCII); if (!n.equals(en)) { - handleViolation(HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME,en); + handleViolation(HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE,en); n = en; cached_field = new HttpField(cached_field.getHeader(),n,v); } } - if (v!=null && !_compliances.contains(HttpComplianceSection.USE_CASE_INSENSITIVE_FIELD_VALUE_CACHE)) + if (v!=null && !_compliances.contains(HttpComplianceSection.CASE_INSENSITIVE_FIELD_VALUE_CACHE)) { String ev = BufferUtil.toString(buffer,buffer.position()+n.length()+1,v.length(),StandardCharsets.ISO_8859_1); if (!v.equals(ev)) { - handleViolation(HttpComplianceSection.USE_CASE_INSENSITIVE_FIELD_VALUE_CACHE,ev+"!="+v); + handleViolation(HttpComplianceSection.CASE_INSENSITIVE_FIELD_VALUE_CACHE,ev+"!="+v); v = ev; cached_field = new HttpField(cached_field.getHeader(),n,v); } @@ -1308,7 +1308,7 @@ public class HttpParser _valueString=""; _length=-1; - if (!complianceViolation(HttpComplianceSection.RFC7230_3_2_FIELD_COLON,_headerString)) + if (!complianceViolation(HttpComplianceSection.FIELD_COLON,_headerString)) { setState(FieldState.FIELD); break; @@ -1316,7 +1316,7 @@ public class HttpParser } //Ignore trailing whitespaces - if (b==HttpTokens.SPACE && !complianceViolation(HttpComplianceSection.RFC7230_3_2_4_NO_WS_AFTER_FIELD_NAME,null)) + if (b==HttpTokens.SPACE && !complianceViolation(HttpComplianceSection.NO_WS_AFTER_FIELD_NAME,null)) { setState(FieldState.WS_AFTER_NAME); break; diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java index e731fe4a36f..1121165b1a3 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpParserTest.java @@ -38,7 +38,7 @@ public class HttpParserTest { static { - HttpCompliance.CUSTOM0.sections().remove(HttpComplianceSection.RFC7230_3_2_4_NO_WS_AFTER_FIELD_NAME); + HttpCompliance.CUSTOM0.sections().remove(HttpComplianceSection.NO_WS_AFTER_FIELD_NAME); } /** @@ -128,7 +128,7 @@ public class HttpParserTest Assert.assertEquals("/999", _uriOrStatus); Assert.assertEquals("HTTP/0.9", _versionOrReason); Assert.assertEquals(-1, _headers); - Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.RFC7230_A2_NO_HTTP_9)); + Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.NO_HTTP_9)); } @Test @@ -157,7 +157,7 @@ public class HttpParserTest Assert.assertEquals("/222", _uriOrStatus); Assert.assertEquals("HTTP/0.9", _versionOrReason); Assert.assertEquals(-1, _headers); - Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.RFC7230_A2_NO_HTTP_9)); + Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.NO_HTTP_9)); } @Test @@ -273,7 +273,7 @@ public class HttpParserTest Assert.assertEquals("Name", _hdr[1]); Assert.assertEquals("value extra", _val[1]); Assert.assertEquals(1, _headers); - Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.RFC7230_3_2_4_NO_FOLDING)); + Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.NO_FIELD_FOLDING)); } @Test @@ -372,7 +372,7 @@ public class HttpParserTest parseAll(parser, buffer); Assert.assertThat(_bad, Matchers.containsString("Illegal character")); - Assert.assertThat(_complianceViolation,contains(HttpComplianceSection.RFC7230_3_2_4_NO_WS_AFTER_FIELD_NAME)); + Assert.assertThat(_complianceViolation,contains(HttpComplianceSection.NO_WS_AFTER_FIELD_NAME)); } @Test @@ -390,7 +390,7 @@ public class HttpParserTest parseAll(parser, buffer); Assert.assertThat(_bad, Matchers.containsString("Illegal character")); - Assert.assertThat(_complianceViolation,contains(HttpComplianceSection.RFC7230_3_2_4_NO_WS_AFTER_FIELD_NAME)); + Assert.assertThat(_complianceViolation,contains(HttpComplianceSection.NO_WS_AFTER_FIELD_NAME)); } @Test @@ -422,7 +422,7 @@ public class HttpParserTest Assert.assertEquals("Other", _hdr[1]); Assert.assertEquals("value", _val[1]); - Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.RFC7230_3_2_4_NO_WS_AFTER_FIELD_NAME)); + Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.NO_WS_AFTER_FIELD_NAME)); } @Test @@ -752,7 +752,7 @@ public class HttpParserTest parseAll(parser, buffer); Assert.assertNull(_bad); Assert.assertEquals("GET", _methodOrVersion); - Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.RFC7230_3_1_1_METHOD_CASE_SENSITIVE)); + Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.METHOD_CASE_SENSITIVE)); } @Test @@ -814,7 +814,7 @@ public class HttpParserTest Assert.assertEquals("cOnNeCtIoN", _hdr[1]); Assert.assertEquals("ClOsE", _val[1]); Assert.assertEquals(1, _headers); - Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME,HttpComplianceSection.RFC7230_3_2_CASE_INSENSITIVE_FIELD_NAME,HttpComplianceSection.USE_CASE_INSENSITIVE_FIELD_VALUE_CACHE)); + Assert.assertThat(_complianceViolation, contains(HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE,HttpComplianceSection.FIELD_NAME_CASE_INSENSITIVE,HttpComplianceSection.CASE_INSENSITIVE_FIELD_VALUE_CACHE)); } @Test