Hi Daniel, Thanks for your quick feedback.
Indeed if I fetch all the bytes, the connection is kept. What's the reason behind this behaviour? Best regards, Nicolas On Mon, 11 Jan 2021 at 21:00, Daniel Fuchs <daniel.fu...@oracle.com> wrote: > Hi Nicolas, > > If I understand correctly you are closing the input stream without > draining the bytes. With HTTP/1.1 this will force the connection > to get closed. This is the expected behavior. > > best regards, > > -- daniel > > On 11/01/2021 20:29, Nicolas Henneaux wrote: > > Hi, > > > > I have a problem when using Java HttpClient with a proxy and HTTP/1.1 > > version. When using a stream body handler, there is no re-use of the TCP > > connection. > > When using another body handler > > (java.net.http.HttpResponse.BodyHandlers#ofString() > > or java.net.http.HttpResponse.BodyHandlers#discarding) there is no such > > problem. > > When using HTTP/2, there is no problem as well. > > > > The following code reproduce the problem. The re-use can be checked > > using /netstat -tn | grep '3128' / > > class ProxyHttp1Check { > > public static void main(String[] args) throws Exception { > > HttpClient httpClient = HttpClient.newBuilder() > > .version(HttpClient.Version.HTTP_1_1) > > > > .proxy(ProxySelector.of(InetSocketAddress.createUnresolved("my-proxy.net > > <http://my-proxy.net>", 3128))) > > .build(); > > HttpRequest httpRequest = > > HttpRequest.newBuilder(URI.create("https://my-website.test > > <https://my-website.test>")).build(); > > for (int i = 0; i < 1_000_000_000; i++) { > > httpClient > > .sendAsync(httpRequest, > > HttpResponse.BodyHandlers.ofInputStream()) > > .get() > > .body() > > .close(); // It seems this is closing the TCP connection > > } > > } > > } > > > > The close comes from the client as underlined in the following dump. > > > > T 2021/01/11 19:24:59.880557 client-ip:57422 -> proxy-ip:3128 [S] #265 > > T 2021/01/11 19:24:59.881067 proxy-ip:3128 -> client-ip:57422 [AS] #266 > > T 2021/01/11 19:24:59.881098 client-ip:57422 -> proxy-ip:3128 [A] #267 > > T 2021/01/11 19:24:59.881671 client-ip:57422 -> proxy-ip:3128 [AP] #268 > > 43 4f 4e 4e 45 43 54 20 61 70 69 2d 74 65 73 74 CONNECT api-test > > 2e 61 77 73 2e 62 61 6d 62 6f 72 61 2e 63 6f 6d > > .aws.bambora.com <http://aws.bambora.com> > > 3a 34 34 33 20 48 54 54 50 2f 31 2e 31 0d 0a 0d :443 HTTP/1.1... > > 0a . > > T 2021/01/11 19:24:59.882077 proxy-ip:3128 -> client-ip:57422 [A] #269 > > T 2021/01/11 19:24:59.883605 proxy-ip:3128 -> client-ip:57422 [AP] #270 > > 48 54 54 50 2f 31 2e 31 20 32 30 30 20 43 6f 6e HTTP/1.1 200 Con > > 6e 65 63 74 69 6f 6e 20 65 73 74 61 62 6c 69 73 nection establis > > 68 65 64 0d 0a 0d 0a hed.... > > T 2021/01/11 19:24:59.883627 client-ip:57422 -> proxy-ip:3128 [A] #271 > > T 2021/01/11 19:24:59.933932 client-ip:57422 -> proxy-ip:3128 [AP] #272 > > T 2021/01/11 19:24:59.952473 proxy-ip:3128 -> client-ip:57422 [AP] #273 > > T 2021/01/11 19:24:59.952515 client-ip:57422 -> proxy-ip:3128 [A] #274 > > *T 2021/01/11 19:25:00.298765 client-ip:57422 -> proxy-ip:3128 [AF] #275* > > T 2021/01/11 19:25:00.299777 proxy-ip:3128 -> client-ip:57422 [AF] #276 > > T 2021/01/11 19:25:00.299809 client-ip:57422 -> proxy-ip:3128 [A] #277 > > > > I have tested it on Java 11.0.9.1, 14.0.2 and 15.0.1 on Ubuntu 20.4.1. > > > > $ /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -version > > openjdk version "11.0.9.1" 2020-11-04 > > OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04) > > OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed > > mode, sharing) > > $ java -version > > openjdk version "14.0.2" 2020-07-14 > > OpenJDK Runtime Environment (build 14.0.2+12-Ubuntu-120.04) > > OpenJDK 64-Bit Server VM (build 14.0.2+12-Ubuntu-120.04, mixed mode, > > sharing) > > $ java -version > > openjdk version "15.0.1" 2020-10-20 > > OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.1+9) > > OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.1+9, mixed mode, > sharing) > > $ uname -a > > Linux enix-002 5.8.0-36-generic #40~20.04.1-Ubuntu SMP Wed Jan 6 > > 10:15:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux > > > > Thanks in advance for your help, > > > > Best regards, > > > > Nicolas Henneaux > >