82 lines
3.2 KiB
Diff
82 lines
3.2 KiB
Diff
|
|
From 66bd71277cedd04af2772942c697e15d5c401de9 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Mark Thomas <markt@apache.org>
|
||
|
|
Date: Mon, 10 May 2021 21:59:44 +0100
|
||
|
|
Subject: [PATCH] Process T-E header from both HTTP 1.0 and HTTP 1.1.clients
|
||
|
|
|
||
|
|
---
|
||
|
|
.../apache/coyote/http11/Http11Processor.java | 4 ++-
|
||
|
|
.../coyote/http11/TestHttp11Processor.java | 28 +++++++++++++++++++
|
||
|
|
webapps/docs/changelog.xml | 4 +++
|
||
|
|
3 files changed, 35 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java
|
||
|
|
index c840c83..4021355 100644
|
||
|
|
--- a/java/org/apache/coyote/http11/Http11Processor.java
|
||
|
|
+++ b/java/org/apache/coyote/http11/Http11Processor.java
|
||
|
|
@@ -766,7 +766,9 @@ public class Http11Processor extends AbstractProcessor {
|
||
|
|
InputFilter[] inputFilters = inputBuffer.getFilters();
|
||
|
|
|
||
|
|
// Parse transfer-encoding header
|
||
|
|
- if (http11) {
|
||
|
|
+ // HTTP specs say an HTTP 1.1 server should accept any recognised
|
||
|
|
+ // HTTP 1.x header from a 1.x client unless the specs says otherwise.
|
||
|
|
+ if (!http09) {
|
||
|
|
MessageBytes transferEncodingValueMB = headers.getValue("transfer-encoding");
|
||
|
|
if (transferEncodingValueMB != null) {
|
||
|
|
String transferEncodingValue = transferEncodingValueMB.toString();
|
||
|
|
diff --git a/test/org/apache/coyote/http11/TestHttp11Processor.java b/test/org/apache/coyote/http11/TestHttp11Processor.java
|
||
|
|
index 1d12007..84fdd42 100644
|
||
|
|
--- a/test/org/apache/coyote/http11/TestHttp11Processor.java
|
||
|
|
+++ b/test/org/apache/coyote/http11/TestHttp11Processor.java
|
||
|
|
@@ -1353,4 +1353,32 @@ public class TestHttp11Processor extends TomcatBaseTest {
|
||
|
|
|
||
|
|
Assert.assertTrue(client.isResponse501());
|
||
|
|
}
|
||
|
|
+
|
||
|
|
+
|
||
|
|
+ @Test
|
||
|
|
+ public void testWithTEChunkedHttp10() throws Exception {
|
||
|
|
+
|
||
|
|
+ getTomcatInstanceTestWebapp(false, true);
|
||
|
|
+
|
||
|
|
+ String request =
|
||
|
|
+ "POST /test/echo-params.jsp HTTP/1.0" + SimpleHttpClient.CRLF +
|
||
|
|
+ "Host: any" + SimpleHttpClient.CRLF +
|
||
|
|
+ "Transfer-encoding: chunked" + SimpleHttpClient.CRLF +
|
||
|
|
+ "Content-Type: application/x-www-form-urlencoded" +
|
||
|
|
+ SimpleHttpClient.CRLF +
|
||
|
|
+ "Connection: close" + SimpleHttpClient.CRLF +
|
||
|
|
+ SimpleHttpClient.CRLF +
|
||
|
|
+ "9" + SimpleHttpClient.CRLF +
|
||
|
|
+ "test=data" + SimpleHttpClient.CRLF +
|
||
|
|
+ "0" + SimpleHttpClient.CRLF +
|
||
|
|
+ SimpleHttpClient.CRLF;
|
||
|
|
+
|
||
|
|
+ Client client = new Client(getPort());
|
||
|
|
+ client.setRequest(new String[] {request});
|
||
|
|
+
|
||
|
|
+ client.connect();
|
||
|
|
+ client.processRequest();
|
||
|
|
+ Assert.assertTrue(client.isResponse200());
|
||
|
|
+ Assert.assertTrue(client.getResponseBody().contains("test - data"));
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
|
||
|
|
index 94a0d94..e47f3d6 100644
|
||
|
|
--- a/webapps/docs/changelog.xml
|
||
|
|
+++ b/webapps/docs/changelog.xml
|
||
|
|
@@ -315,6 +315,10 @@
|
||
|
|
in 2001. Requests using this transfer encoding will now receive a 501
|
||
|
|
response. (markt)
|
||
|
|
</fix>
|
||
|
|
+ <fix>
|
||
|
|
+ Process transfer encoding headers from both HTTP 1.0 and HTTP 1.1
|
||
|
|
+ clients. (markt)
|
||
|
|
+ </fix>
|
||
|
|
</changelog>
|
||
|
|
</subsection>
|
||
|
|
<subsection name="Web applications">
|
||
|
|
--
|
||
|
|
2.23.0
|
||
|
|
|