hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gonzalo Bermúdez (JIRA) <j...@apache.org>
Subject [jira] [Commented] (HTTPCLIENT-1815) CLONE - Request 'hangs' on invalid response from server
Date Thu, 16 Feb 2017 18:10:41 GMT

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-1815?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15870424#comment-15870424

Gonzalo Bermúdez commented on HTTPCLIENT-1815:

I cloned the issue since the original requester is not responding. I uploaded an updated test
case with the failing scenario, explained in the original bug.

After some debugging, I think there's no fail-proof way of discarding garbage when reading
the HTTP header on the second request. I'd propose then, discarding the useless response body
on HttpRequestExecutor#189. The code snippet I'm watching is:
                if (canResponseHaveBody(request, response)) {

I'd add an else statement discarding the response body right there, since that body will not
be seeing by the library's clients anyways. Does this sound reasonable? I can submit a patch
if so.

> CLONE - Request 'hangs' on invalid response from server
> -------------------------------------------------------
>                 Key: HTTPCLIENT-1815
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1815
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: Fluent HC, HttpClient (classic)
>         Environment: Java 8
> Running test with either Maven or IntelliJ.
>            Reporter: Gonzalo Bermúdez
>         Attachments: TestMalformedServerResponse.java
> When using the fluent api to do a request and the response of the previous request was
status NoContent, but (!) the server did send some content anyway, then the next request is
blocked for a long time. No response is ever returned. Eventually some timeout will unblock
the thread, but the request has failed.
> To reproduce this issue:
> - create a server which returns a NoContent with some text body.
> - do a first request
> - do a second request. This request hangs/blocks the thread for long time.
> We're using Fluent API to easily unit test our rest api. In a test class where a test
was doing multiple requests, the first test would pass, but the second test would stall and
eventually fail. Individually the tests were passing. I could not find any issue on the server
side, so I tried another http client (Ning) which seemed to fix the issue. After rewriting
the test to use Ning instead of HttpClient, the tests were successful, but when I changed
it to reuse the same AsyncHttpClient, I got the same issue. However, because Ning does not
block but throws an exception, I was finally able to find the issue which caused the problem:
an endpoint returning a NoContent status, but with some text body.
> Even though this is a server issue, the httpclient should not block the thread for such
a long time and also return a proper error so this kind of issues so the cause is easier to
track down. Now, if I would not have used Ning, I would not have found the issue.
> The problem occurred when using Fluent Api, but I assume to cause for the thread to block
and not return a proper error is in the HttpClient component.

This message was sent by Atlassian JIRA

To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org

View raw message