Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
5.0.3, 5.1.1
-
None
-
None
-
nginx version older 1.18.0
Description
Hello.
We use AsyncHttpClient from Apache HttpClient5 (version 5.1).
We faced an error when connection is unexpectedly closed using TLS, forced HTTP/1.1, and nginx version older 1.18.0.
In the log below the server responds with 200 OK and an empty body.
We can see response headers but connection is prematurely closed.
[2021-08-16T20:22:50.950+03:00] … [headers] c-0000000000 << HTTP/1.1 200 OK [2021-08-16T20:22:50.950+03:00] … [headers] c-0000000000 << Server: nginx [2021-08-16T20:22:50.950+03:00] … [headers] c-0000000000 << Date: Mon, 16 Aug 2021 17:22:50 GMT [2021-08-16T20:22:50.951+03:00] … [headers] c-0000000000 << Content-Type: text/html; charset=UTF-8 [2021-08-16T20:22:50.951+03:00] … [headers] c-0000000000 << Connection: close [2021-08-16T20:22:50.951+03:00] … [headers] c-0000000000 << Set-Cookie: <masked cookie>; expires=Sat, 21-Aug-2021 17:22:50 GMT; Max-Age=432000; path=/ [2021-08-16T20:22:50.951+03:00] … [headers] c-0000000000 << Expires: Thu, 19 Nov 1981 08:52:00 GMT [2021-08-16T20:22:50.951+03:00] … [headers] c-0000000000 << Cache-Control: no-store, no-cache, must-revalidate [2021-08-16T20:22:50.951+03:00] … [headers] c-0000000000 << Pragma: no-cache [2021-08-16T20:22:50.954+03:00] … [HttpAsyncMainClientExec] ex-0000000001 consume response HTTP/1.1 200 OK, entity len -9223372036854775807 [2021-08-16T20:22:50.967+03:00] … [HttpAsyncMainClientExec] ex-0000000001 execution failed: Connection is closed [2021-08-16T20:22:50.968+03:00] … [InternalAbstractHttpAsyncClient] ex-0000000001 request failed: Connection is closed [2021-08-16T20:22:50.968+03:00] … [PoolingAsyncClientConnectionManager] ep-0000000000 close IMMEDIATE [2021-08-16T20:22:50.968+03:00] … [DefaultManagedAsyncClientConnection] c-0000000000 Shutdown connection IMMEDIATE
That happens with the almost default configuration of the HTTP client (only versionPolicy and tlsStrategy are configured).
To reproduce such behavior all of these conditions must be met:
1) Server must be accessed via nginx version older 1.18.0 (I tested 1.16.1 and 1.18.0);
2) A request contains a body;
3) A response doesn't contain "Content-Length" header;
4) TLS is used.
5) HTTP/1.1 is used.
I think there is a bug. We've tried httpclient5 (classic, version 5.1) and AsyncHttpClient (Netty based). Both of them work correctly.