Thank you for your reply. I created a repository that demonstrates the issue.
https://github.com/tzahifadida/test-chunked Currently it is set to 10.1.25 and fails. If you change it to 10.1.19 (in the pom.xml <tomcat.version>10.1.19</tomcat.version>) it will succeed. It should show 5 postings and not 1 in the output. The test can be run with “mvn test”. The output of the tcpdump is the same for both. The success dump and output (you can see the deltas are greater than 0 indicating they were received one by one): 2024-08-13T11:39:29.873+03:00 INFO 9753 --- [ Thread-1] o.s.boot.SpringApplication : No active profile set, falling back to 1 default profile: "default" 2024-08-13T11:39:30.344+03:00 INFO 9753 --- [ Thread-1] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2024-08-13T11:39:30.350+03:00 INFO 9753 --- [ Thread-1] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-08-13T11:39:30.350+03:00 INFO 9753 --- [ Thread-1] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.19] 2024-08-13T11:39:30.397+03:00 INFO 9753 --- [ Thread-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-08-13T11:39:30.398+03:00 INFO 9753 --- [ Thread-1] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 499 ms 2024-08-13T11:39:30.582+03:00 INFO 9753 --- [ Thread-1] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2024-08-13T11:39:30.586+03:00 INFO 9753 --- [ Thread-1] o.s.boot.SpringApplication : Started application in 0.944 seconds (process running for 1.334) 2024-08-13T11:39:34.693+03:00 INFO 9753 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-08-13T11:39:34.693+03:00 INFO 9753 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2024-08-13T11:39:34.694+03:00 INFO 9753 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2024-08-13T11:39:34.708+03:00 INFO 9753 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : EndPoint Controller /post 2024-08-13T11:39:35.630+03:00 INFO 9753 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 0 , delta: 922, counter: 1 2024-08-13T11:39:36.633+03:00 INFO 9753 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 1 , delta: 1001, counter: 2 2024-08-13T11:39:37.637+03:00 INFO 9753 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 2 , delta: 1003, counter: 3 2024-08-13T11:39:38.642+03:00 INFO 9753 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 3 , delta: 1004, counter: 4 2024-08-13T11:39:39.646+03:00 INFO 9753 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 4 , delta: 1004, counter: 5 11:39:34.653512 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 1784064028:1784064203, ack 571601977, win 6379, options [nop,nop,TS val 3085463629 ecr 2661427862], length 175: HTTP: POST /post HTTP/1.1 E.....@.@...............jV.."..9........... ..pM..*.POST /post HTTP/1.1 Content-Type: application/octet-stream User-Agent: Java/22.0.2 Host: localhost:8080 Accept: */* Connection: keep-alive Transfer-Encoding: chunked 11:39:35.628844 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 175:194, ack 1, win 6379, options [nop,nop,TS val 3085464606 ecr 2661427863], length 19: HTTP E..G..@.@...............jV.."..9.....;..... ..t...*.e PostingData 0 11:39:36.633382 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 194:213, ack 1, win 6379, options [nop,nop,TS val 3085465610 ecr 2661428840], length 19: HTTP E..G..@.@...............jV.."..9.....;..... ..x ...he PostingData 1 11:39:37.637367 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 213:232, ack 1, win 6379, options [nop,nop,TS val 3085466614 ecr 2661429844], length 19: HTTP E..G..@.@...............jV.."..9.....;..... ..{...2Te PostingData 2 11:39:38.641831 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 232:251, ack 1, win 6379, options [nop,nop,TS val 3085467618 ecr 2661430848], length 19: HTTP E..G..@.@...............jV.."..9.....;..... ......6@e PostingData 3 11:39:39.645695 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 251:270, ack 1, win 6379, options [nop,nop,TS val 3085468623 ecr 2661431852], length 19: HTTP E..G..@.@...............jV.."..9.....;..... ......:,e PostingData 4 11:39:39.646338 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 270:273, ack 1, win 6379, options [nop,nop,TS val 3085468623 ecr 2661432857], length 3: HTTP E..7..@.@...............jV.*"..9.....+..... ......>.0 11:39:39.646455 IP localhost.49328 > localhost.http-alt: Flags [P.], seq 273:275, ack 1, win 6379, options [nop,nop,TS val 3085468623 ecr 2661432857], length 2: HTTP E..6..@.@...............jV.-"..9.....*..... ......>. 11:39:39.686540 IP localhost.http-alt > localhost.49328: Flags [P.], seq 1:163, ack 275, win 6375, options [nop,nop,TS val 2661432897 ecr 3085468623], length 162: HTTP: HTTP/1.1 200 E.....@.@..............."..9jV./........... ..>A....HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 1 Date: Tue, 13 Aug 2024 08:39:39 GMT Keep-Alive: timeout=60 Connection: keep-alive The FAILED dump and output (you will see that they all were received at the same time since the delta is 0): 2024-08-13T11:43:03.323+03:00 INFO 10451 --- [ Thread-1] o.s.boot.SpringApplication : No active profile set, falling back to 1 default profile: "default" 2024-08-13T11:43:03.792+03:00 INFO 10451 --- [ Thread-1] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2024-08-13T11:43:03.798+03:00 INFO 10451 --- [ Thread-1] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-08-13T11:43:03.798+03:00 INFO 10451 --- [ Thread-1] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.25] 2024-08-13T11:43:03.851+03:00 INFO 10451 --- [ Thread-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-08-13T11:43:03.852+03:00 INFO 10451 --- [ Thread-1] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 507 ms 2024-08-13T11:43:04.057+03:00 INFO 10451 --- [ Thread-1] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2024-08-13T11:43:04.063+03:00 INFO 10451 --- [ Thread-1] o.s.boot.SpringApplication : Started application in 1.0 seconds (process running for 1.399) 2024-08-13T11:43:08.101+03:00 INFO 10451 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-08-13T11:43:08.101+03:00 INFO 10451 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2024-08-13T11:43:08.102+03:00 INFO 10451 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2024-08-13T11:43:08.114+03:00 INFO 10451 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : EndPoint Controller /post 2024-08-13T11:43:13.051+03:00 INFO 10451 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 0 , delta: 4937, counter: 1 2024-08-13T11:43:13.053+03:00 INFO 10451 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 1 , delta: 0, counter: 1 2024-08-13T11:43:13.054+03:00 INFO 10451 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 2 , delta: 0, counter: 1 2024-08-13T11:43:13.054+03:00 INFO 10451 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 3 , delta: 0, counter: 1 2024-08-13T11:43:13.054+03:00 INFO 10451 --- [nio-8080-exec-1] com.example.chunked.ChunkedController : Reading from POST stream: PostingData 4 , delta: 0, counter: 1 2024-08-13T11:43:13.078+03:00 INFO 10451 --- [ main] c.e.chunked.ChunkedApplicationTests : Response: 1 [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 10.143 s <<< FAILURE! - in com.example.chunked.ChunkedApplicationTests 11:43:08.062510 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 3965401847:3965402022, ack 2785484648, win 6379, options [nop,nop,TS val 2988012988 ecr 1104779806], length 175: HTTP: POST /post HTTP/1.1 E.....@.@................[:....h........... ..u.A...POST /post HTTP/1.1 Content-Type: application/octet-stream User-Agent: Java/22.0.2 Host: localhost:8080 Accept: */* Connection: keep-alive Transfer-Encoding: chunked 11:43:09.034422 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 175:194, ack 1, win 6379, options [nop,nop,TS val 2988013961 ecr 1104779807], length 19: HTTP E..G..@.@................[;....h.....;..... ..y.A...e PostingData 0 11:43:10.037596 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 194:213, ack 1, win 6379, options [nop,nop,TS val 2988014964 ecr 1104780780], length 19: HTTP E..G..@.@................[;....h.....;..... ..}tA...e PostingData 1 11:43:11.042428 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 213:232, ack 1, win 6379, options [nop,nop,TS val 2988015969 ecr 1104781783], length 19: HTTP E..G..@.@................[;....h.....;..... ...aA...e PostingData 2 11:43:12.045420 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 232:251, ack 1, win 6379, options [nop,nop,TS val 2988016972 ecr 1104782788], length 19: HTTP E..G..@.@................[;....h.....;..... ...LA...e PostingData 3 11:43:13.049666 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 251:270, ack 1, win 6379, options [nop,nop,TS val 2988017976 ecr 1104783791], length 19: HTTP E..G..@.@................[;....h.....;..... ...8A...e PostingData 4 11:43:13.049780 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 270:273, ack 1, win 6379, options [nop,nop,TS val 2988017976 ecr 1104784795], length 3: HTTP E..7..@.@................[<....h.....+..... ...8A...0 11:43:13.049838 IP localhost.49795 > localhost.http-alt: Flags [P.], seq 273:275, ack 1, win 6379, options [nop,nop,TS val 2988017976 ecr 1104784795], length 2: HTTP E..6..@.@................[<....h.....*..... ...8A... 11:43:13.076541 IP localhost.http-alt > localhost.49795: Flags [P.], seq 1:163, ack 275, win 6375, options [nop,nop,TS val 1104784822 ecr 2988017976], length 162: HTTP: HTTP/1.1 200 E.....@.@..................h.[< ........... A......8HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 1 Date: Tue, 13 Aug 2024 08:43:13 GMT Keep-Alive: timeout=60 Connection: keep-alive From: Mark Thomas <ma...@apache.org> Date: Sunday, 11 August 2024 at 17:37 To: users@tomcat.apache.org <users@tomcat.apache.org> Subject: Re: Issue with Chunked Transfer Encoding in Tomcat 10.1.25-10.1.28 with Spring On 11/08/2024 13:50, Itzhak Fadida wrote: > • Problem: Chunked transfer encoding seems to behave incorrectly in > Tomcat versions 10.1.25 through 10.1.28. Specifically, instead of > receiving several chunks of data, I am receiving the entire message in > a single chunk, but only when the connection is closed by the client. What makes multiple chunks correct and one chunk incorrect? If the connection is closed by the client, how is the client receiving the response? > I reviewed the changelogs and noticed there were modifications related > to chunked transfer encoding in these versions. Really? What changes? > • Spring Version: 3.3.2. Do you mean Spring Boot here? > I appreciate any insights or advice from the community. If additional > information is needed, I’m happy to provide it. A minimal reproducible test case is usually the easiest way for other folks to investigate the behaviour you are seeing. Mark --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org