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

Connection is never reused if response is gzip with non-negative Content-Length

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.1.1
    • 4.1.4, 4.2-alpha1
    • None
    • None

    Description

      While debugging a separate issue, I noticed that DefaultConnectionReuseStrategy is very sensitive to whether the server returns a positive content-length or content-length=-1 with chunked encoding. In particular, I saw two cases:
      (1) Server returns gzip response with Content-Length=-1, chunked encoding. The connection is reused.
      (2) Server returns gzip response with Content-Length=<actual-number-of-bytes-in-response> The connection is NOT reused.

      This is because of the following code in DefaultConnectionReuseStrategy:

      if (entity.getContentLength() < 0) {
      if (!entity.isChunked() ||
      ver.lessEquals(HttpVersion.HTTP_1_0))

      { // if the content length is not known and is not chunk // encoded, the connection cannot be reused return false; }

      }

      GzipDecompressingEntity implements its getContentLength as always returning -1. However, it is not chunked. Therefore, the connection is not reused.

      I'm not sure if you would consider this a bug or a request for enhancement, but it seems to me that if the server is returning an accurate content-length, the client should be able to consume that number of bytes, then reuse the connection.

      Attachments

        Activity

          People

            Unassigned Unassigned
            drabe Daniel Rabe
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: