"end-to-end" headers in HTTP/1.1 [was Re: Mandatory]

From: Jeffrey Mogul (mogul@pa.dec.com)
Date: Thu, Apr 09 1998


Message-Id: <9804092034.AA10453@acetes.pa.dec.com>
To: hardie@nic.nasa.gov
Cc: ietf-http-ext@w3.org
Date: Thu, 09 Apr 98 13:34:46 MDT
From: Jeffrey Mogul <mogul@pa.dec.com>
Subject: "end-to-end" headers in HTTP/1.1 [was Re: Mandatory]

    (Henrik)
    I have two points here: First, I disagree that HTTP defines end-to-end to
    mean from the user agent to the origin server. For example, the text in
    13.5.1 says
    
	* End-to-end headers, which must be transmitted to the
	ultimate recipient of a request or response. End-to-end
	headers in responses must be stored as part of a cache
	entry and transmitted in any response formed from a
	cache entry.

    Think of caching, for example. The client sends a set of header
    fields in the request that it considers to be end-to-end, however,
    they may never reach the origin server because a cache happens to
    be the "ultimate recipient".
    
    (Ted, again)
    
    I still believe there is a different behavior being defined in
    Mandatory than the caching example provides.  The proxy cache
    behavior is defined by the proxy's need to act for the end host;
    in the presence of an end to end header in a request for which
    it has a valid entry, the proxy can still reply, on behalf of
    the ultimate recipient.  It can't itself be the recipient of
    an end-to-end header (as an example, on a request for a resource
    which it has never before seen, the proxy *must* transmit all
    end to end headers to the ultimate recipient).
    
Ted is right.  I wrote the paragraph that Henrik cited, and
Henrik's interpretation is exactly opposite to actual meaning.
If there is any confusion, try reading that paragraph in its
complete context:

   For the purpose of defining the behavior of caches and non-caching
   proxies, we divide HTTP headers into two categories:

  o  End-to-end headers, which must be transmitted to the
     ultimate recipient of a request or response. End-to-end
     headers in responses must be stored as part of a cache entry
     and transmitted in any response formed from a cache entry.
  o  Hop-by-hop headers, which are meaningful only for a single
     transport-level connection, and are not stored by caches or
     forwarded by proxies.

In context, it should be clear that an "end-to-end" header is one
that MUST be delivered to the server that is the target of
a request (unless the request isn't forwarded to that server at all).

You cannot separate an end-to-end header from the request of the
request (or response).

-Jeff