Subject: Re: WGLC: p4, 304 Not Modified

From: "Roy T. Fielding" <[email-masked]>
Date: Sat, 10 Aug 2013 17:31:04 -0700

The change was intentional.  A server has no means to determine what
values a cache might already have for those fields, so saying that they
only be sent when they differ is complete nonsense (a.k.a., a hidden
requirement that servers remember all past metadata of a resource for all
time). Hence, they are now required if they would have been sent in a 200,
which is really what 2616 intended to say.

The reason that they are required to be sent (if they would have been
sent in a 200) is that those fields are significant to cache selection
and freshness criteria which might be changed by the origin server,
at any time, without resulting in a change to the validators.

....Roy

On Apr 29, 2013, at 5:31 AM, Mark Nottingham wrote:

> Hi Ken,
> 
> I re-opened this issue as a result:
>  http://trac.tools.ietf.org/wg/httpbis/trac/ticket/345
> 
> We didn't add Last-Modified (or rather, we added it and then took it out) because doing so would make some existant implementations non-conformant, and there isn't a clear win in interop or security by doing so.
> 
> Also, ETag is used by caches to help differentiate the selected response, when multiple etags are sent in If-None-Match.
> 
> That said, it's a good question as to why some things are required to be returned when they haven't changed, as this *does* represent a change from 2616; hence, the reopened issue.
> 
> Cheers,
> 
> 
> On 29/04/2013, at 10:18 PM, Ken Murchison <[email-masked]> wrote:
> 
>> Any thoughts on this?
>> 
>> 
>> Ken Murchison wrote:
>>> Hi All,
>>> 
>>> In re-reading the latest section 4.1, I'm wondering why ETag was singled out as being a MUST generate, while Last-Modified isn't.  If the server is capable of generating both, shouldn't it return both, as it SHOULD for 200 responses (per section 2.4)?  What if the client only supports Last-Modified and not ETag (e.g. used If-Modified-Since in its request)?
>>> 
>>> That being said, if the representation hasn't been modified then presumably none of the validators changed.  What's the point in returning any of them?  Shouldn't it be all or nothing?  Just trying to wrap my head around the logic behind singling out ETag over Last-Modified for 304.
>>> 
>> -- 
>> Kenneth Murchison
>> Principal Systems Software Engineer
>> Carnegie Mellon University
>> 
>> 
> 
> --
> Mark Nottingham   http://www.mnot.net/
> 
> 
> 
>