On Tue, 27 Sep 2022 14:44:00 GMT, Michael McMahon <micha...@openjdk.org> wrote:
>> **Issue** >> When using HTTP/2 with the HttpClient, it can often be necessary to close an >> idle Http2 Connection before a server sends a GOAWAY frame. For example, a >> server or cloud based tool could close a TCP connection silently when it is >> idle for too long resulting in ConnectionResetException being thrown by the >> HttpClient. >> >> **Proposed Solution** >> A new system property, `jdk.httpclient.idleConnectionTimeout`, was added and >> is used to specify in Milliseconds how long an idle connection (idle >> connections are those which have no currently active streams) for the >> HttpClient before the connection is closed. > > I'd agree 1200 sec (20 mins) is way too high. I would think 5-6 mins would be > more appropriate. After discussing with @Michael-Mc-Mahon it seems there is a use case for being able to configure HTTP/1.1 and HTTP/2 keepAlive timeouts independently. It wouldn't be unusual to configure an HTTP/1.1 keepAlive to e.g. 3-5s to have the client close the connection before the sever does, but a better value for HTTP/2 might be in the range of e.g 60s. HTTP/2 specifies a graceful GOAWAY and PING mechanism that allow client & server to cooperate on / detect connection close, which (theoretically) should avoid attempting to reuse stale connections. Maybe we could introduce a new system property, say "jdk.httpclient.keepalive.timeout.h2" which could be used to configure HTTP/2 keepAlive separately. The default value for this property could be taken from "jdk.httpclient.keepalive.timeout". So specifying "-Djdk.httpclient.keepalive.timeout=<timeout>" would configure a global timeout both for HTTP/1.1 and HTTP/2, but "-Djdk.httpclient.keepalive.timeout.h2=<timeout>" could override this value for HTTP/2 if needed. ------------- PR: https://git.openjdk.org/jdk/pull/10183