Archive for January, 2015

HTTP KeepAliveTimeout

What is the difference between:
Header set Connection keep-alive and KeepAlive on?

If you simply set the header Connection: keep-alive it isn’t going to be enough. The client will think it’s a keep-alive connection but the server may decide to close the connection. Additionally, the client doesn’t know how many requests can be served through the keep-alive connection. There’s an additional header that is used to track requests sent through a keep-alive connection that looks like this:

Keep-Alive: timeout=15, max=100

which tells the client that it can send up to 100 more requests on the current keep-alive connection (and it counts down as you continue to use said keep-alive connection) and that the client has 15 seconds to make any additioanl requests before the connection is closed.

Simply using the header isn’t sufficient to establish a keep alive connection because the server needs to negotiate it. Both ends need to know about the keep-alive and both ends need to do proper accounting. You need to tell the server to handle keep-alive on its end and simply sending the header isn’t going to do that. You need to turn keep-alive on using the second directive:

KeepAlive on
And additionally, you can tweak the keep-alive mechanism with directives like:

KeepAliveTimeout 15
MaxKeepAliveRequests 100

Categories: Misc