hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary Gregory (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HTTPCORE-482) org.apache.http.nio.protocol.HttpAsyncService does returns an empty response when a socket timeout is detected
Date Wed, 16 Aug 2017 22:23:01 GMT
Gary Gregory created HTTPCORE-482:
-------------------------------------

             Summary: org.apache.http.nio.protocol.HttpAsyncService does returns an empty
response when a socket timeout is detected
                 Key: HTTPCORE-482
                 URL: https://issues.apache.org/jira/browse/HTTPCORE-482
             Project: HttpComponents HttpCore
          Issue Type: Bug
          Components: HttpCore NIO
    Affects Versions: 4.4.6
         Environment: org.apache.http.nio.protocol.HttpAsyncService does returns an empty
response when a socket timeout is detected
            Reporter: Gary Gregory
            Assignee: Gary Gregory
             Fix For: 4.4.7


org.apache.http.nio.protocol.HttpAsyncService does returns an empty response when a socket
timeout is detected.

When a timeout occurs in an async proxy when an origin server takes too long to reply, HttpAsyncService
returns empty response.

You can reproduce this issue with our async example {{NHttpReverseProxy}}:

Start it with: http://postman-echo.com 8888

Then run:

curl --verbose --max-time 1000 http://localhost:8888/delay/3

and you will get an EMPTY response from the server, no HTTP status code where I would expect
a 504 or 500.

The proxy prints out:

Reverse proxy to http://postman-echo.com:80
[client->proxy] connection open 127.0.0.1:8888<->127.0.0.1:61128
[client->proxy] 00000001 GET /delay/3 HTTP/1.1
[client->proxy] 00000001 request completed
[proxy->origin] connection open 192.168.0.112:61130<->52.44.234.173:80
[proxy->origin] 00000001 GET /delay/3 HTTP/1.1
[proxy->origin] 00000001 request completed
[client->proxy] connection closed 127.0.0.1:8888<->127.0.0.1:61128
[client<-proxy] 00000001 java.net.SocketTimeoutException
[proxy->origin] connection released 192.168.0.112:61130<->52.44.234.173:80
[proxy->origin] [total kept alive: 0; total allocated: 0 of 100]
[proxy->origin] connection closed 192.168.0.112:61130<->52.44.234.173:80

Curl prints:

* STATE: INIT => CONNECT handle 0x600057930; line 1410 (connection #-5000)
* Added connection 0. The cache now contains 1 members
* STATE: CONNECT => WAITRESOLVE handle 0x600057930; line 1446 (connection #0)
*   Trying ::1...
* TCP_NODELAY set
* STATE: WAITRESOLVE => WAITCONNECT handle 0x600057930; line 1527 (connection #0)
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8888 (#0)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x600057930; line 1579 (connection #0)
* Marked for [keep alive]: HTTP default
* STATE: SENDPROTOCONNECT => DO handle 0x600057930; line 1597 (connection #0)
> GET /delay/3 HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.54.1
> Accept: */*
>
* STATE: DO => DO_DONE handle 0x600057930; line 1676 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x600057930; line 1801 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x600057930; line 1811 (connection #0)
* STATE: PERFORM => DONE handle 0x600057930; line 1980 (connection #0)
* multi_done
* Empty reply from server
* Connection #0 to host localhost left intact
* Expire cleared
curl: (52) Empty reply from server

I have a fix that returns a 504 GATEWAY_TIMEOUT when a socket timeout is detected.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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


Mime
View raw message