RE: [squid-users] Expires: vs. Cache-Control: max-age

2008-09-26 Thread Markus Karg
According to HTTP/1.1 specification, the precedence is not determined by
the keyword, but by the value: The shorter age is to be taken.

Regards
Markus

> -Original Message-
> From: Chris Woodfield [mailto:[EMAIL PROTECTED]
> Sent: Freitag, 26. September 2008 23:46
> To: Squid Users
> Subject: [squid-users] Expires: vs. Cache-Control: max-age
> 
> Hi,
> 
> Can someone confirm whether Expires: or Cache-control: max-age
> parameters take precedence when both are present in an object's
> headers? My assumption would be Cache-control: max-age would be
> preferred, but we're seeing some behavior that suggests otherwise.
> 
> Specifically, we're seeing Expires: headers in the past resulting in
> refresh checks against our origin even when a Cache-Control: max-age
> header is present and the cached object should be fresh per that
> metric.
> 
> What we're seeing is somewhat similar to bug 2430, but I want to make
> sure what we're seeing isn't expected behavior.
> 
> Thanks,
> 
> -Chris


Re: [squid-users] Expires: vs. Cache-Control: max-age

2008-09-30 Thread Mark Nottingham

No, that's not true. RFC2616:


13.2.4 Expiration Calculations
In order to decide whether a response is fresh or stale, we need to  
compare its freshness lifetime to its age. The age is calculated as  
described in section 13.2.3; this section describes how to calculate  
the freshness lifetime, and to determine if a response has expired.  
In the discussion below, the values can be represented in any form  
appropriate for arithmetic operations.


We use the term "expires_value" to denote the value of the Expires  
header. We use the term "max_age_value" to denote an appropriate  
value of the number of seconds carried by the "max-age" directive of  
the Cache-Control header in a response (see section 14.9.3).


The max-age directive takes priority over Expires, so if max-age is  
present in a response, the calculation is simply:


freshness_lifetime = max_age_value
Otherwise, if Expires is present in the response, the calculation is:

freshness_lifetime = expires_value - date_value


and later:


14.9.3 Modifications of the Basic Expiration Mechanism
The expiration time of an entity MAY be specified by the origin  
server using the Expires header (see section 14.21). Alternatively,  
it MAY be specified using the max-age directive in a response. When  
the max-age cache-control directive is present in a cached response,  
the response is stale if its current age is greater than the age  
value given (in seconds) at the time of a new request for that  
resource. The max-age directive on a response implies that the  
response is cacheable (i.e., "public") unless some other, more  
restrictive cache directive is also present.


If a response includes both an Expires header and a max-age  
directive, the max-age directive overrides the Expires header, even  
if the Expires header is more restrictive. This rule allows an  
origin server to provide, for a given response, a longer expiration  
time to an HTTP/1.1 (or later) cache than to an HTTP/1.0 cache. This  
might be useful if certain HTTP/1.0 caches improperly calculate ages  
or expiration times, perhaps due to desynchronized clocks.




I.e., the max-age cache-control directive takes precedence over Expires.
I've tested Squid and a number of other caches with Co-Advisor, and if  
Expires indicates the response is fresh, but CC: max-age says it's  
stale, it will treat it as stale, for just about any given cache.  
Unfortunately, Co-Advisor doesn't test the reverse situation, although  
I may have overlooked it (Alex?).



On 27/09/2008, at 4:44 PM, Markus Karg wrote:

According to HTTP/1.1 specification, the precedence is not  
determined by

the keyword, but by the value: The shorter age is to be taken.

Regards
Markus


-Original Message-
From: Chris Woodfield [mailto:[EMAIL PROTECTED]
Sent: Freitag, 26. September 2008 23:46
To: Squid Users
Subject: [squid-users] Expires: vs. Cache-Control: max-age

Hi,

Can someone confirm whether Expires: or Cache-control: max-age
parameters take precedence when both are present in an object's
headers? My assumption would be Cache-control: max-age would be
preferred, but we're seeing some behavior that suggests otherwise.

Specifically, we're seeing Expires: headers in the past resulting in
refresh checks against our origin even when a Cache-Control: max-age
header is present and the cached object should be fresh per that
metric.

What we're seeing is somewhat similar to bug 2430, but I want to make
sure what we're seeing isn't expected behavior.

Thanks,

-Chris


--
Mark Nottingham   [EMAIL PROTECTED]




Re: [squid-users] Expires: vs. Cache-Control: max-age

2008-10-01 Thread Alex Rousskov
On Wed, 2008-10-01 at 15:42 +1000, Mark Nottingham wrote:
> No, that's not true. RFC2616:
> 
> > 13.2.4 Expiration Calculations
> > In order to decide whether a response is fresh or stale, we need to  
> > compare its freshness lifetime to its age. The age is calculated as  
> > described in section 13.2.3; this section describes how to calculate  
> > the freshness lifetime, and to determine if a response has expired.  
> > In the discussion below, the values can be represented in any form  
> > appropriate for arithmetic operations.
> >
> > We use the term "expires_value" to denote the value of the Expires  
> > header. We use the term "max_age_value" to denote an appropriate  
> > value of the number of seconds carried by the "max-age" directive of  
> > the Cache-Control header in a response (see section 14.9.3).
> >
> > The max-age directive takes priority over Expires, so if max-age is  
> > present in a response, the calculation is simply:
> >
> > freshness_lifetime = max_age_value
> > Otherwise, if Expires is present in the response, the calculation is:
> >
> > freshness_lifetime = expires_value - date_value
> 
> and later:
> 
> > 14.9.3 Modifications of the Basic Expiration Mechanism
> > The expiration time of an entity MAY be specified by the origin  
> > server using the Expires header (see section 14.21). Alternatively,  
> > it MAY be specified using the max-age directive in a response. When  
> > the max-age cache-control directive is present in a cached response,  
> > the response is stale if its current age is greater than the age  
> > value given (in seconds) at the time of a new request for that  
> > resource. The max-age directive on a response implies that the  
> > response is cacheable (i.e., "public") unless some other, more  
> > restrictive cache directive is also present.
> >
> > If a response includes both an Expires header and a max-age  
> > directive, the max-age directive overrides the Expires header, even  
> > if the Expires header is more restrictive. This rule allows an  
> > origin server to provide, for a given response, a longer expiration  
> > time to an HTTP/1.1 (or later) cache than to an HTTP/1.0 cache. This  
> > might be useful if certain HTTP/1.0 caches improperly calculate ages  
> > or expiration times, perhaps due to desynchronized clocks.
> >
> 
> I.e., the max-age cache-control directive takes precedence over Expires.
> I've tested Squid and a number of other caches with Co-Advisor, and if  
> Expires indicates the response is fresh, but CC: max-age says it's  
> stale, it will treat it as stale, for just about any given cache.  
> Unfortunately, Co-Advisor doesn't test the reverse situation, although  
> I may have overlooked it (Alex?).

I am sorry, I am not sure what you mean by the "reverse situation".
Expires indicates stale but max-age says fresh? If not, can you specify
it explicitly?

Thank you,

Alex.


> On 27/09/2008, at 4:44 PM, Markus Karg wrote:
> 
> > According to HTTP/1.1 specification, the precedence is not  
> > determined by
> > the keyword, but by the value: The shorter age is to be taken.
> >
> > Regards
> > Markus
> >
> >> -Original Message-
> >> From: Chris Woodfield [mailto:[EMAIL PROTECTED]
> >> Sent: Freitag, 26. September 2008 23:46
> >> To: Squid Users
> >> Subject: [squid-users] Expires: vs. Cache-Control: max-age
> >>
> >> Hi,
> >>
> >> Can someone confirm whether Expires: or Cache-control: max-age
> >> parameters take precedence when both are present in an object's
> >> headers? My assumption would be Cache-control: max-age would be
> >> preferred, but we're seeing some behavior that suggests otherwise.
> >>
> >> Specifically, we're seeing Expires: headers in the past resulting in
> >> refresh checks against our origin even when a Cache-Control: max-age
> >> header is present and the cached object should be fresh per that
> >> metric.
> >>
> >> What we're seeing is somewhat similar to bug 2430, but I want to make
> >> sure what we're seeing isn't expected behavior.
> >>
> >> Thanks,
> >>
> >> -Chris
> 
> --
> Mark Nottingham   [EMAIL PROTECTED]
> 



Re: [squid-users] Expires: vs. Cache-Control: max-age

2008-10-01 Thread Mark Nottingham


On 02/10/2008, at 3:37 PM, Alex Rousskov wrote:


I.e., the max-age cache-control directive takes precedence over  
Expires.
I've tested Squid and a number of other caches with Co-Advisor, and  
if

Expires indicates the response is fresh, but CC: max-age says it's
stale, it will treat it as stale, for just about any given cache.
Unfortunately, Co-Advisor doesn't test the reverse situation,  
although

I may have overlooked it (Alex?).


I am sorry, I am not sure what you mean by the "reverse situation".
Expires indicates stale but max-age says fresh? If not, can you  
specify

it explicitly?

Thank you,

Alex.




Yes, that's it.

Cheers,

--
Mark Nottingham   [EMAIL PROTECTED]




Re: [squid-users] Expires: vs. Cache-Control: max-age

2008-10-02 Thread Henrik Nordstrom
On ons, 2008-10-01 at 15:42 +1000, Mark Nottingham wrote:

> I.e., the max-age cache-control directive takes precedence over Expires.
> I've tested Squid and a number of other caches with Co-Advisor, and if  
> Expires indicates the response is fresh, but CC: max-age says it's  
> stale, it will treat it as stale, for just about any given cache.  

Correct. Squid ignores Expires if there is a CC max-age response
directive.

See HttpReply::hdrExpirationTime() / httpReplyHdrExpirationTime().

Regards
Henrik


signature.asc
Description: This is a digitally signed message part