Re: HTTP Compliance: entry is stale if request has max-age=0

From: Alex Rousskov <rousskov_at_measurement-factory.com>
Date: Wed, 03 Nov 2010 10:17:02 -0600

On 10/04/2010 07:33 PM, Amos Jeffries wrote:
> On Mon, 04 Oct 2010 17:06:28 -0600, Alex Rousskov
> <rousskov_at_measurement-factory.com> wrote:
>> HTTP Compliance: entry is stale if request has max-age=0.
>>
>> We should always do validation for requests with Cache-Control
>> max-age=0, even when entry age is also zero. In our case, RFC 2616 says:
>>
>> freshness_lifetime = max_age_value
>> response_is_fresh = (freshness_lifetime> current_age)
>>
>> response_is_fresh is always false if freshness_lifetime is zero...
>>
>>
>> The check code was introduced in r5998 with a "Import of fix-ranges
>> branch" message. The code was commented out at the time of that commit,
>> for reasons unknown.
>>
>> Test case:
>> test_case/rfc2616/noSrv-hit-stale-max-age-req
>
> +1 on the patch.

Committed to trunk as r11012.

> In other related bits;
> I think we have a documentation bug with ignore-reload. That violations
> if() case above it silently tests and skips for ignore-reload&& max-age=0.
> Could you please add a debugs() message to the if() case matching the
> other trace cases?

Done as r11013.

> The test itself looks wrong to me, I would expect max-age=* all equate to
> a client reload request when the object is outside that age. In these cases
> it's unclear if a reload should be allowed despite the admin preference (as
> now done). Or if the client should receive a fail or stale response.
> My leaning is that the client should get the stale response. The admin
> has explicitly required a violation of HTTP and chosen to face the
> consequences.

Squid.conf documentation says that ignore-reload ignores a client
no-cache or "reload" header. It does not say anything about ignoring
minimum freshness requirements. Zero max-age is a special case because
it should only be used for reload and not for minimum freshness control.
In a sense, max-age=0 as defined by RFC 2616 is not about the cached
response age at all. Thus, the current code, while confusing, appears to
match the documented intent.

> In 3.1+ reverse-proxies the http_port "ignore-cc" option
> should be used instead.

Ignore-cc will indeed bypass all max-age checks, regardless of the
max-age value.

Thank you,

Alex.
Received on Wed Nov 03 2010 - 16:17:18 MDT

This archive was generated by hypermail 2.2.0 : Wed Nov 03 2010 - 12:00:05 MDT