- From: Roy T. Fielding <fielding@avron.ICS.UCI.EDU>
- Date: Thu, 02 May 1996 02:50:50 -0700
- To: John Franks <john@math.nwu.edu>
- Cc: Jim Gettys <jg@w3.org>, http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
> I still don't understand the point of having both Connection: > Persistent and Connection: Keep-Alive (not to mention "Connection: > keep-alive, persistent"). Having carefully read section E.2.5 and > E.2.5.1 I understand that the chunked encoding may be used with > persistent but not with keep-alive. This seems to be the only > difference. The fifth paragragh of Section E.2.5 is poorly worded. Keep-Alive has no impact whatsoever on the use of chunked. Change An HTTP/1.1 server may also establish persistent connections with HTTP/1.0 clients upon receipt of a Keep-Alive connection token. A persistent connection based on the Keep-Alive connection token MUST only use the _Content-Length_ technique for marking the ending boundaries of entity-bodies. It MAY use pipe-lining. to An HTTP/1.1 server may also establish persistent connections with HTTP/1.0 clients upon receipt of a Keep-Alive connection token. However, a persistent connection with an HTTP/1.0 client cannot make use of the chunked transfer-coding, and therefore MUST use a Content-Length for marking the ending boundary of each Entity-Body. > Since persistent connections are one hop phenomena and every > client/server/proxy knows whether its immediate neighbor is talking > 1.0 or 1.1, why couldn't we always use use "keep-alive" to indicate a > persistent connection. It seems like both ends of a transaction will > know if the chunked encoding is allowed since they know whether they > are speaking 1.1 or later. Chunked is required for 1.1 and not > available for 1.0. It seems redundant and obscure to code an "it's ok > to use chunked" message in the Connection header since isn't needed > anyway. > > Is there something I am missing here? The fear was that some existing 1.0 clients may be sending keep-alive to a proxy server that doesn't understand Connection, which would then erroneously forward it to the next inbound server, which would establish the keep-alive connection and result in a dead 1.0 proxy waiting for the close on the response. The result is that 1.0 clients must be prevented from using keep-alive when talking to proxies. However, talking to proxies is the most important use of persistent connections, so that is clearly unacceptable. Therefore, we need some other mechanism for indicating a persistent connection is desired, which is safe to use even when talking to an old proxy that ignores Connection. As it turns out, there are two ways to accomplish that: 1) Introduce a new keyword (persist) which is declared to be valid only when received from an HTTP/1.1 message. 2) Declare persistence to be the default for HTTP/1.1 messages and introduce a new keyword (close) for declaring non-persistence. [Jim, it might be useful to insert this into the keep-alive appendix as rationale.] I am inclined to go with the second option, since it gives us a better migration path for future versions of the protocol and makes it easier for us to eventually stop supporting some of the broken implementations of keep-alive in existing practice. ...Roy T. Fielding Department of Information & Computer Science (fielding@ics.uci.edu) University of California, Irvine, CA 92717-3425 fax:+1(714)824-4056 http://www.ics.uci.edu/~fielding/
Received on Thursday, 2 May 1996 03:01:48 UTC