Uploaded image for project: 'HttpComponents HttpClient'
  1. HttpComponents HttpClient
  2. HTTPCLIENT-1655

HttpClient 4.4.1 sends RST instead of proper FIN ACK sequence when using non-persistant connections

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.4.1
    • Fix Version/s: 4.5.1
    • Component/s: HttpClient (classic)
    • Labels:
      None

      Description

      I'm seeing an interesting behavior with HttpClient 4.4.1 GA (latest release as of the writing of this issue) when trying to make http requests with no keep-alive.

      First, let me post my code for the case in which I try to request using keep-alive.

      Java code for keepalive test with httpclient 4.4.1 GA

      With the code above, everything works great. All my requests are done one the same connection and we get a nice graceful close with a couple FIN ACKs at the end. The capture is here:

      Capture of keepalive test with httpclient 4.4.1 GA

      However, when I try to do the same thing without using keepalive (I set "Connection: close" in the httpclient and make sure I call close on the httpclient as well at the end of each request), I see I the client send a reset (RST) signal to the server at the end of the connection.

      The code for the non keepalive test is here:

      Java code for no keepalive test with httpclient 4.4.1 GA

      And its capture is here:

      Capture of no keepalive test with httpclient 4.4.1 GA

      I don't understand why the test with non persistent connections isn't gracefully closing the connection as it does with the persistent use case by sending a FIN,ACK to the server. It instead chooses to send a RST. Am I doing something wrong?

      I tried the same test for no keep-alive with our legacy code using the now deprecated "commons-httpclient-3.1.jar" library. I see a proper connection close there.

      Capture of no keepalive test with commons-httpclient-3.1

      I've attached as much info as I can think of but if the wire logs or any other info is needed, I'd be more than happy to append it.

        Attachments

        1. old_code_mss.pcap
          6.87 MB
          Alan Silva
        2. POC_keep_alive_WITHOUT_class.pcap
          360 kB
          Alan Silva
        3. POC_WITHOUT_keep_alive_WITHOUT_class.pcap
          365 kB
          Alan Silva
        4. KeepAliveTest.java
          4 kB
          Alan Silva
        5. NoKeepAliveTest.java
          4 kB
          Alan Silva
        6. KeepAliveTestWireLog
          20 kB
          Alan Silva
        7. NonKeepAliveTestWireLog
          23 kB
          Alan Silva
        8. REAL_MSS_WITH_no_keep_alive.pcap
          9.56 MB
          Alan Silva

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              Alan Silva Alan Silva
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: