Uploaded image for project: 'HttpComponents HttpCore'
  1. HttpComponents HttpCore
  2. HTTPCORE-684

Connection is unexpectedly closed with http1.1, TLS, old nginx

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.0.3, 5.1.1
    • 5.1.2, 5.2-alpha1
    • 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.

      Attachments

        1. ok_sync_5_1.txt
          10 kB
          Vitalina Komarova
        2. ok_async_without_body_5_1.txt
          16 kB
          Vitalina Komarova
        3. broken_async_snapshot.txt
          16 kB
          Vitalina Komarova
        4. broken_async_5_1.txt
          16 kB
          Vitalina Komarova

        Activity

          People

            Unassigned Unassigned
            horyukova Vitalina Komarova
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: