Re: Vary VS URI with an eye towards caching

Daniel DuBois:
>
>>>Okay, so what's the syntax?
>>
>>I suggset:
>>Vary = "Vary" ":" 1#varying
>>varying = field-name *( ";" parameter )
>>
>>field-name is the name of an HTTP header.
>>
>>parameter provides more information on how the resource depends on the
>>specified header. Example of intended parameter use (N.B. I'm not actaully
>>suggesting this)
>>Vary: Accept; type="image/gif"; type="image/jpg"
>
>I suggset:
>Vary = "Vary" ":" 1#varying
>varying = field-name
>
>unless you can describe to me what [; type="image/gif"; type="image/jpg"] is
>supposed to indicate and how behavior should change based on such
>paramters.

I would also like to know what this [; type="image/gif";
type="image/jpg"] is supposed to do.  Isn't this getting close to an
URI header again?

With respect to 

  Vary = "Vary" ":" 1#varying
  varying = field-name

I also have a problem: the custom (opaque) variant rating algorithm
used by the server may not just vary on the request headers.  It may
also vary on the IP address of the client, on the current time, on
internal server state, etc.

I have a list of things that can be varied on in section 2 of the
known range negotiation draft
(http://www.organic.com/public/conneg/mail/0063.html).

Therefore, I propose the following vary header or field:

  Vary = "Vary" ":" 1#varying
  varying = field-name | "external-factor"

The inclusion of "external-factor" in the vary header or field means
that the response varies on something other than a request header.
I'm open to suggestions for a tag name better than "external-factor",
but I do feel that there definitely needs to be some way to express
this kind of variance.

A related issue: there are 8 combinations of presence of URI, Vary,
and Location (Content-Location) in responses, and we need to cover all
of them.  

My ideas on this are as follows.  I have listed all cases separately
to make discussion easier, the 1.1 document would of course cover all
cases in a more compact way.

** For 200 OK responses that include a response body **

(also for 20x OK-but-but-do-not-cache-if-you-are-a-1.0-cache responses
that include a response body)

200.1) No URI, no Vary, no Location:

    - normal, un-negotiated response.

200.2) No URI, no Vary, a Location:

    - ignore Location header
    - see 200.1.

200.3) No URI, a Vary, no Location:

    - opaque negotiation
    - response body varies on things in the Vary header,
    - but no `send-no-body-for' possible

200.4) No URI, a Vary, a Location:

    - opaque negotiation
    - response body varies on things in the Vary header,
    - `send-no-body-for' possible

200.5) A URI, no Vary, no Location:

    - server error, response can be passed on, but may not be cached

200.6) A URI, no Vary, a Location:

    - transparent negotiation
    - URI header does not vary on anything
    - Location and response body are a variant given by preemptive
      negotiation using the variants in the URI header
    -`send-no-body-for' possible

200.7) A URI, a Vary, no Location:

    - server error, response may be passed on, but may not be cached

200.8) A URI, a Vary, a Location:

    - partly opaque, partly transparent negotiation:
    - URI header varies on the things in the Vary header
    - Location and response body are a variant given by preemptive
      negotiation using the variants in the URI header
    - `send-no-body-for' possible


** For 300 (use reactive negotiation) responses that do not include a
response body, as received by the user agent**

(proxies just pass on 300 responses)

300.1-4) No URI

    - server error, response may be shown, but may not be cached

300.5) A URI, no Vary, no Location:

    - do transparent reactive negotiation using the URI header
    - URI header does not vary on anything

300.6) A URI, no Vary, a Location:

    - as 300.5.
    - If not capable of reactive negotiation, use the URI in the Location
      header.

300.7) A URI, a Vary, no Location:

    - do transparent reactive negotiation using the URI header
    - URI header varies on the things in the Vary header

300.8) A URI, a Vary, a Location:

    - as 300.7.
    - If not capable of reactive negotiation, use the URI in the Location
      header.


>Dan DuBois, Software Animal             http://www.spyglass.com/~ddubois/

Koen.

Received on Friday, 12 January 1996 11:09:46 UTC