How do I know WHEN to close an HTTP 1.1 Keep-Alive Connection?

Bret picture Bret · Sep 26, 2008 · Viewed 7.6k times · Source

I am writing a web server in Java and I want it to support HTTP 1.1 Keep-Alive connections. But how can I tell when the client is done sending requests for a given connection? (like a double end-of-line or something).

Lets see how stackoverflow handles this very obscure question -- answers for which, on Google, are mired in technical specifications and obscure language. I want a plain-english answer for a non-C programmer :)


I see. that confirms my suspicion of having to rely on the SocketTimeoutException. But i wasn't sure if there was something i could rely on from the client that indicates it is done with the connection--which would allow me to close the connections sooner in most cases--instead of waiting for the timeout. Thanks

Answer

Pete Karl II picture Pete Karl II · Sep 26, 2008

If you're building your server to meet the standard, then you've got a lot of information to guide you here already.

Simple spoken, it should be based on a time since a connection was used, and not so much at the level of request data.

In a longer-winded way, the practical considerations section of the HTTP/1.1 document has some guidance for you:

"Servers will usually have some time-out value beyond which they will no longer maintain an inactive connection. Proxy servers might make this a higher value since it is likely that the client will be making more connections through the same server. The use of persistent connections places no requirements on the length (or existence) of this time-out for either the client or the server."

or

"When a client or server wishes to time-out it SHOULD issue a graceful close on the transport connection. Clients and servers SHOULD both constantly watch for the other side of the transport close, and respond to it as appropriate. If a client or server does not detect the other side's close promptly it could cause unnecessary resource drain on the network."