[ 
https://issues.apache.org/jira/browse/HTTPCORE-508?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski moved HTTPCLIENT-1902 to HTTPCORE-508:
--------------------------------------------------------

        Fix Version/s:     (was: 4.5.6)
                           (was: 5.0 Beta2)
                           (was: 4.6 Alpha1)
                       5.0-beta3
                       4.4.10
    Affects Version/s:     (was: 4.5.5)
                           (was: 4.5.2)
                       4.4.9
                       5.0-beta2
          Component/s:     (was: HttpClient (classic))
                       HttpCore NIO
                       HttpCore
             Workflow: classic default workflow  (was: Default workflow, 
editable Closed status)
                  Key: HTTPCORE-508  (was: HTTPCLIENT-1902)
              Project: HttpComponents HttpCore  (was: HttpComponents HttpClient)

> Handle "HTTP/1.1 000 status code 000" responses
> -----------------------------------------------
>
>                 Key: HTTPCORE-508
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-508
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore, HttpCore NIO
>    Affects Versions: 5.0-beta2, 4.4.9
>            Reporter: Petar Petrov
>            Assignee: Oleg Kalnichevski
>            Priority: Major
>             Fix For: 4.4.10, 5.0-beta3
>
>         Attachments: canResponseHaveABody.png, doReceiveResponse.png
>
>
> Hi!
> I have a very _funny_ behaviour where the HttpClient seems to wrongly 
> interpret the body of an HTTP response as headers, the parsing of which 
> eventually leads to a java.net.SocketTimeoutException. 
> The underlying cause of this seems to be a a faulty server response, i.e.,
> {noformat}
> HTTP/1.1 000 status code 000{noformat}
> Thank you Apple! /s
>  
> I have managed to trace the origin of the problem to the *method 
> HttpRequestExecutor#canResponseHaveBody* where, as expected, 000 is not 
> considered as a valid status code.
> !canResponseHaveABody.png!
> !doReceiveResponse.png!
> So what happens seems to be that the status line and headers get parsed. The 
> 000 is not considered valid and that ends the processing of the response. 
> Then the rest of the response (the body) seems to go through the parsing 
> procedure again in *DefaultHttpResponseParser#parseHead*. The body is of 
> content type application/json. Eventually the following exceptions gets 
> thrown after a while:
> {code:java}
> java.net.SocketTimeoutException: Read timed out
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.socketRead(SocketInputStream.java:127)
> at java.net.SocketInputStream.read(SocketInputStream.java:182)
> at java.net.SocketInputStream.read(SocketInputStream.java:152)
> at 
> org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
> at 
> org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
> at 
> org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282)
> at 
> org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
> at 
> org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
> at 
> org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
> at 
> org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
> at 
> org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:165)
> at 
> org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
> at 
> org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
> at 
> org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
> at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
> at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
> at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
> at 
> org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
> at 
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
> at 
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
> {code}
>  
> I'm not really familiar if 000 is even a valid return code. When querying the 
> server with some other HTTP tools like Postman, I do get the json response 
> with a status code 000.
> Do you guys think this is something that can be fixed in HttpClient or at 
> least handled by some sort of an error?
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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

Reply via email to