2011/04/20 - List of keep-alive / close options with associated behaviours. PK="http-pretend-keepalive", HC="httpclose", SC="http-server-close", FC = "forceclose". 0 = option not set 1 = option is set * = option doesn't matter Options can be split between frontend and backend, so some of them might have a meaning only when combined by associating a frontend to a backend. Some forms are not the normal ones and provide a behaviour compatible with another normal form. Those are considered alternate forms and are marked "(alt)". FC SC HC PK Behaviour 0 0 0 X tunnel mode 0 0 1 0 passive close, only set headers then tunnel 0 0 1 1 forced close with keep-alive announce (alt) 0 1 0 0 server close 0 1 0 1 server close with keep-alive announce 0 1 1 0 forced close (alt) 0 1 1 1 forced close with keep-alive announce (alt) 1 * * 0 forced close 1 * * 1 forced close with keep-alive announce At this point this results in 4 distinct effective modes for a request being processed : - tunnel mode : Connection header is left untouched and body is ignored - passive close : Connection header is changed and body is ignored - server close : Connection header set, body scanned, client-side keep-alive is made possible regardless of server-side capabilities - forced close : Connection header set, body scanned, connection closed. The "close" modes may be combined with a fake keep-alive announce to the server in order to workaround buggy servers that disable chunked encoding and content length announces when the client does not ask for keep-alive. Note: "http-pretend-keepalive" alone has no effect. However, if it is set in a backend while a frontend is in "http-close" mode, then the combination of both will result in a forced close with keep-alive announces for requests passing through both. It is also worth noting that "option httpclose" alone has become useless since 1.4, because "option forceclose" does the right thing, while the former only pretends to do the right thing. Both options might get merged in the future.