W3C home > Mailing lists > Public > http-caching-historical@w3.org > February 1996

Re: why no-cache is not reload

From: Roy T. Fielding <fielding@avron.ICS.UCI.EDU>
Date: Tue, 20 Feb 1996 09:18:48 -0800
To: Jeffrey Mogul <mogul@pa.dec.com>
Cc: http-caching@pa.dec.com
Message-Id: <9602200918.aa11999@paris.ics.uci.edu>
> After watching this discussion go by, I'd like to agree with Roy
> that (1) the Cache-control directives in his HTTP/1.1 draft
> will work, and (2) they are obviously confusing, because
> a lot of people (myself included) were confused for a long time.

Are the names confusing, or is it just that people do not understand
the difference between "browser actions" and protocol syntax?
The fact that a single browser action is achieved by a combination
of two (or more) protocol elements may be confusing, but we wouldn't
make it less confusing by changing the name of one of those elements
when the one by itself is not sufficient to achieve the semantics
of its new name.

> The question of what names should be used is definitely a secondary
> one, but since lots of people do NOT find the currently-used names
> "meaningful" (in that they unambiguously convey the intended use
> and semantics), if we don't change the names then we must certainly
> improve the specification.  The purpose of an IETF-blessed spec
> is to allow independent implementation of interoperable systems,
> so if an aspect of the spec has been widely misconstrued, it has
> to be fixed.

No problem there -- the answer is to improve the wording of the
specification to explain the usage of multiple protocol elements
to achieve the desired semantics.  That is what the chapter on Caching
is supposed to do.

> Let me see what we have consensus on, and where we are still
> disagreeing.
> 
> I will begin WITHOUT reference to specific syntax, because
> if we cannot agree on the semantics then there's no point
> in debating syntax.
> 
> (1) Semantics: the HTTP protocol needs to support these cases
> in request messages:
> 
> 	(A) I want a firsthand response from the origin server.
> 
> 	(B) I want a response that has been validated with the
> 	origin server after I made this request.
> 
> 	(C) I want to validate my own cached response with
> 	the origin server.
> 	
> 	(D) I want to validate my own cached response, but I'll
> 	accept a non-authoritative answer (i.e., from a cache
> 	that has a still-fresh copy with a matching validator)
> 	
> 	(E) I want a fresh response.
> 
> Note that I've arranged these in roughly decreasing order of "paranoia".

The way you phrased the above sentences would lead you down the wrong
track in trying to determine the actual semantics.  Try this:

    (A) I want a new copy from the origin server.

    (B) I want a response from the origin server
        based on the parameters of this request.

    (C) I want a new copy from the next inbound cache or origin.

    (D) I want a response from the next inbound cache or origin
        based on the parameters of this request.

    (E) I want whatever is currently available.

Note: (A) is just a special case of (B)
      (C) is just a special case of (D)
      (E) is a special case of (D) as well, except that it is explicitly
          saying that semantic transparency is not desired.

> (2) Terminology: since we seem to spend a lot of time arguing
> about things when we are really just using different definitions
> for terms, let me propose a set of terms that we can use for these
> five cases.
> 
> 	A = Reload
> 	B = Revalidate
> 	C = Specific revalidate
> 	D = Conditional method
> 	E = Normal method
> 
> If someone would like to propose a better set of terms, please do
> so.  Please don't just complain without proposing something else.

        A = Reload
        B = Refresh             (whether or not it is valid is immaterial)
        C = Refresh from origin (Revalidate is okay, but less descriptive)
        D = Conditional GET
        E = GET

> (3) Syntax: if I understand Roy's spec correctly, this is what
> he has proposed:
> 
> 	A = Reload
> 	    GET /home.html HTTP/1.1
> 	    Cache-control: no-cache

Yes.

> 	B = Revalidate
> 	    GET /home.html HTTP/1.1
> 	    Cache-control: max-age=0

No.     B = Refresh
            GET /home.html HTTP/1.1
            <some-conditional-header>: <time or version-based condition>

> 	C = Specific revalidate
> 	    GET /home.html HTTP/1.1
> 	    If-Modified-Since: Thu, 15 Feb 1996 15:05:20 GMT
> 	    Cache-control: no-cache

Yes, but more accurately:

        C = Refresh from origin
            GET /home.html HTTP/1.1
            <some-conditional-header>: <condition that achieves refresh>
            Cache-control: no-cache

> 	D = Conditional method
> 	    GET /home.html HTTP/1.1
> 	    If-Modified-Since: Thu, 15 Feb 1996 15:05:20 GMT

Nope, that is only one of [6?] proposed ways of making a condition

        D = Conditional method
            GET /home.html HTTP/1.1
            <some-conditional-header>: <condition>

> 	E = Normal method
> 	    GET /home.html HTTP/1.1
> 
> Of course, "If-Invalid:" would be used if the server has sent an opaque
> validator.

Or IF, If-ID, Unless-Modified-Since, Cache-control: max-age, etc.

> This is what my proposal was:
> 	A = Reload
> 	    GET /home.html HTTP/1.1
> 	    Cache-control: reload

No, it introduces an unnecessary contradiction with

            GET /home.html HTTP/1.1
            Cache-control: reload
            If-Modified-Since: Thu, 15 Feb 1996 15:05:20 GMT

> 	B = Revalidate
> 	    GET /home.html HTTP/1.1
> 	    Cache-control: revalidate

No, it introduces a contradiction if no validation information is provided
to go along with the revalidate directive.  Furthermore, it places syntax
significant to an origin server in a place that origin servers should
never need to look.

> 	C = Specific revalidate
> 	    GET /home.html HTTP/1.1
> 	    If-Modified-Since: Thu, 15 Feb 1996 15:05:20 GMT
> 	    Cache-control: revalidate

Redundant.

> 	D = Conditional method
> 	    GET /home.html HTTP/1.1
> 	    If-Modified-Since: Thu, 15 Feb 1996 15:05:20 GMT
> 
> 	E = Normal method
> 	    GET /home.html HTTP/1.1
> 
> <SOAPBOX>
> I'll state for the record that, while I don't think it makes a
> big difference, I think it is unnecessarily confusing and absolutely
> without pragmatic value to use the same tokens (e.g., no-cache
> or max-age) on both request and response, especially when their
> meanings are significantly different depending on the direction.

The meaning of both of those directives are identical on both request
and response.  The only thing that changes are the browser actions
which make use of those directives, and that distinction is not
meaningful to the protocol.

> While it is true that the current practice with "Pragma: no-cache"
> does make this error, I do not think that this makes it any more
> attractive to compound the error in a brand-new header ("Cache-control:").
> </SOAPBOX>
> 
> Summary of consensus status:
> (1) I believe we have consensus on the underlying semantics for
> this aspect of the protocol.

I don't.  Your syntax ignores my (E) and therefore is inadequate
to describe existing browser behavior, let alone the protocol.

HTTP/1.1 as currently specified has our two (E)'s being equivalent.
I'm not sure why you have it that HTTP will only transfer fresh entities 
by default.  If you change that default, then you also need a new
syntax for obtaining the old default.

> (2) We need commonly-held terminology to discuss things, and unless
> someone suggests something better soon, I'll assume we are agreed
> on my proposed terms.

Negative.  The terms used in the HTTP/1.1 spec are more accurate
regarding the purpose and effect of the protocol elements in question.

> (3) The debate over syntax, as far as I can, is entirely concerned
> with
> 	(a) different views of what is "meaningful" (or how
> 	meaningful a token name needs to be anyway).

Yes.  That and a less-than-perfect understanding of the protocol based
in no small part on a less-than-perfect description in the spec.

> 	(b) different views of whether the existing syntax of
> 	Pragma: should be carried forward to Cache-control:

Not relevant -- the syntax was carried forward because it was the
right syntax for Pragma as well.


 ...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 Tuesday, 20 February 1996 18:03:32 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 19:55:57 UTC