Re: The problem with proxy-revalidate, and a proposed solution

    Jeffrey Mogul writes:
     > After thinking about it for a while, and making up a table of all
     > the possible combinations....
    
    Anselm Baird-Smith writes:
    I think it would help a lot to have this table, before actually going
    into deeper discussions.
    
Actually, I did create the table before sending that message, but I
thought the message was already pretty long without it.  Also, the
table needs some explanatory notes, which I have now added.  See
below.

    BTW it would be nice if this table also contained the warnings to be
    emitted for each cases along with the conditions under which these
    warnings should be emitted.

I'll take you up on your offer to help ... if you can figure out
how to add these to the table, please do so.  It would be nice if
it still fits in a 72-column fixed-width format, because then I
can stick it into an Internet-Draft without any glitches.

-Jeff

Explanatory notes:

The leftmost column shows the Cache-control headers emitted by the
origin server.  In all cases, I assume that the response is marked
as "revalidatable" in some way, such as the presence of an entity-tag
or last-modified date.

The rest of the table is divided into two major columns, depending
on whether the cache involved is at an end-client system, or a
shared proxy cache.  (We can probably treat a non-shared proxy
cache as being a sort of "distributed" implementation of an end-client
cache.)

Each of the major columns is divided into three minor columns, showing
the action to take
	(1) if the response is fresh
	(2) if the response is stale, and the cache is being strict
	about revalidating stale responses
	(3) if the response is stale, and the cache is not being strict
	about revalidating stale responses

The table assumes that there is only one kind of "max age" for a response,
set by a max-age directive (or, equivalently, by an Expires header).
If we were to introduce a proxy-maxage directive, the table would
need some more rows, and in the Proxy Cache columns, the test for
"freshness" would have to account for this new kind of "max age".

In the table entries,
	NA	   means "not applicable" (i.e., can't happen)
	use	   means "use entry without revalidating"
	check	   means "use entry after revalidating"
	ignore	   means "use entry without revalidating, even if stale"


Site:		    Client cache		    Proxy Cache
entry state:	fresh	stale	stale		fresh	stale	stale
policy:			strict	loose			strict	loose
-----------------------------------------------------------------------
In current HTTP/1.1 spec:
-----------------------------------------------------------------------
Age limit
from server
===========
No max-age	use	NA	NA		use	NA	NA

max-age > 0	use	check	ignore		use	check	ignore

max-age = 0	NA	check	ignore		NA	check	ignore

must-reval	use	check	check		use	check	check
+max-age > 0

must-reval	NA	check	check		NA	check	check
+max-age = 0

proxy-reval	use	check	ignore		use	check	check
+max-age > 0

proxy-reval	NA	check	ignore		NA	check	check
+max-age = 0

-----------------------------------------------------------------------
Missing from HTTP/1.1 spec:
-----------------------------------------------------------------------
Age limit
from server
===========
No max-age	use	NA	NA		check	NA	NA

max-age > 0	use	check	ignore		check	check	check

max-age = 0	NA	check	ignore		NA	check	check

-----------------------------------------------------------------------
If we added a proxy-mustcheck directive, those three rows would become:
-----------------------------------------------------------------------
Age limit
from server
===========
No max-age	use	NA	NA		check	NA	NA
+proxy-
mustcheck

max-age > 0	use	check	ignore		check	check	check
+proxy-
mustcheck

max-age = 0	NA	check	ignore		NA	check	check
+proxy-
mustcheck

-----------------------------------------------------------------------
Missing from HTTP/1.1 spec, but probably not useful:
-----------------------------------------------------------------------
Age limit
from server
===========
No max-age	check	NA	NA		use	NA	NA

max-age > 0	check	check	check		use	check	ignore

max-age = 0	NA	check	check		NA	check	ignore

Received on Friday, 20 December 1996 11:21:54 UTC