HTTP response version, again

Dave Kristol writes:
	...

 > Case 1 (return HTTP/1.0 to HTTP/1.0 request):
 > The protocol version in the response MUST be the lesser of HTTP/1.1 and
 > the protocol version in the request.  The headers in the response MUST
 > be consistent with the protocol version in the response.
 > 
 > Case 2 (return HTTP/1.1 to HTTP/1.0 request):
 > The protocol version in the response MUST be the greater of HTTP/1.1 and
 > the protocol version in the request.  The headers in the response MUST
 > be consistent with the protocol version in the request.
 > 
 > We need to agree on one case or the other and (I believe) to choose words
 > to add to the draft.
 > 
 > Dave Kristol
 > 
 > 


There are multiple possible interpretations of "The headers in the
response MUST be consistent with the protocol version in the
(response|request)".
Interpretation A:  the headers in the response must be _defined_ in the
protocol version in the (response|request), or
Interpretation B:  the headers in the response must _not be inconsistent_
with the protocol version in the (response|request). 

The way in which the major/minor version scheme works is involved with
this.  It's always supposed to be possible for a 1.n client to receive
1.m responses from a 1.m server and behave reasonably according to the
capabilities of version min(1.n,1.m).  If m<=n, the headers will
describe how a version 1.m client should behave, and the 1.n version
should be able to do that.  If m>n, the response should still have a
reasonable interpretation in 1.n.  If this can't work, the major/minor
version system isn't going to work.

If we believe interpretation A above, then a HTTP 1.0 proxy anywhere
between a HTTP 1.1 client and a HTTP 1.1 server would prevent the
server from ever being able to pass any 1.1-only headers through the
proxy to the client in either case (1) or (2).  Furthermore this would
require proxies to remove 1.1 headers when responding to 1.0 clients.
So, this is pretty bad.

If we believe interpretation A above, then, since 1.1 is supposed to
be backward compatible with 1.0, if headers defined in 1.1 are left
uninterpreted (and this is the crux of the major/minor version
scheme), then it is always OK to return a normal 1.1 response to a 1.0
request.  This seems to suggest it makes sense to return a 1.1 version
number as well.

--Shel

Received on Friday, 20 December 1996 15:34:55 UTC