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



    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.4.1
    • 4.5.1
    • HttpClient (classic)
    • None


      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.


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



            Unassigned Unassigned
            Alan Silva Alan Silva
            0 Vote for this issue
            1 Start watching this issue