From 486503bd310aee3e27e068e174129575929a311f Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 7 Nov 2023 14:02:01 +0100 Subject: [PATCH] Buffer writes in JettyClientHttpRequest This commit ensures that not every OutputStream.write gets written as a separate chunk, by buffering the written data in a BufferedOutputStream. In some cases, a large quantity of small writes would result in many sent chunks. Closes gh-31361 --- .../http/client/JettyClientHttpRequest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java index 16c7546dfcb..c8462dda81d 100644 --- a/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java @@ -16,6 +16,7 @@ package org.springframework.http.client; +import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UncheckedIOException; @@ -44,6 +45,9 @@ import org.springframework.util.StreamUtils; */ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest { + private static final int CHUNK_SIZE = 1024; + + private final Request request; private final long readTimeout; @@ -85,7 +89,8 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest { OutputStreamRequestContent requestContent = new OutputStreamRequestContent(contentType); this.request.body(requestContent) .send(responseListener); - try (OutputStream outputStream = requestContent.getOutputStream()) { + try (OutputStream outputStream = + new BufferedOutputStream(requestContent.getOutputStream(), CHUNK_SIZE)) { body.writeTo(StreamUtils.nonClosing(outputStream)); } }