summaryrefslogtreecommitdiffstats
path: root/doc/close-options.txt
blob: 0554bb859c69b7a10fde2232771cc8dffafc1b32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2011/04/20 - List of keep-alive / close options with associated behaviours.

PK="http-pretend-keepalive", HC="httpclose", SC="http-server-close",

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)".

SC HC PK    Behaviour
 0  0  X    tunnel mode
 0  1  0    passive close, only set headers then tunnel
 0  1  1    forced close with keep-alive announce (alt)
 1  0  0    server close
 1  0  1    server close with keep-alive announce
 1  1  0    forced close (alt)
 1  1  1    forced close with keep-alive announce (alt)

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.