Re: Why is Dilbert cached? (caching past expires)

From: Andrew Leahy <>
Date: Mon, 15 Jun 1998 23:49:11 +1000 (EST)

> > Are you perchance using MSIE as a browser? When using proxies it has
> > a tendency to be unable to refresh objects through a proxy.

(I think this has been discussed before, anyhow...)

On a related issue I'm seeing problems with Squid 1.1.x delivering expired
(ie. the "Expires:" header in the past due) objects to browsers. For me,
this shows up on sites which use multitudes of inline images, as I move
back and forth within the site the images are continually being "reloaded"
by the browser since it thinks the images are "old", but Squid keeps on
delivering the same expired images.

I believe this is a side-effect of the "refresh" logic -

        FRESH if age < min
        STALE if expires < now
        STALE if age > max
        FRESH if lm-factor < percent

If the object age (as determined by any refresh_pattern setting) is less
than "min", then it is delivered regardless of any "Expires:" header.
However, Netscape abides by the objects "Expires:" header and won't keep
the object in it's cache, so a subsequent request on the object initiates
a second download (I only really noticed this problem when I use dialup,
where reloading 30 x 1K GIF's each time you hit "Back" is real pain!).

For the time being I've started cranking down the "refresh_pattern" on GIF
images, originally I had it set for a month but I'm now down to a week and
it looks like I'll come down to under a day.

Being behind several (3) proxy caches compounds my problem, if I change my
Squid so the "min age" for images is small BUT my upstream proxies have a
larger "min age" I can still end up with "Expired:" objects being
delivered to my cache and then my browser.

Besides changing the refresh logic so that "Expires:" is always obeyed
(which means those annoying sites who "Expire" everything 1 second into
the future instantly become uncachable). Off the top of my head I thought
of two solutions -

1. If an object is younger than the "min age" but the "Expires:" is older,
have Squid rewrite the "Expires:" header of the object being delivered to
the client so it expires sometime in the future (maybe adding the time
needed until "min age" is met - that way Squid won't be bothered by the
client again until the time Squid thinks the object deserves a second look
:-). Making sure the "Expires:" header of the real cached object is not
changed so that it can be expired 'normally' later on.

2. Allow greater control over the 'object refresh' logic. Say, by adding
extra options to the "refresh_pattern" settings. Being able to force the
"Expires:" header to be checked before "min age". I dunno, something like:

        refresh_pattern/i \.gif$ 7200 90% 10080 use_expires

I haven't had a chance to check the Squid-1.2 beta's, maybe some of this
has already been solved.

Andrew "Alf" Leahy, phone: 02 47 360622
Unix Systems Administrator,
School of Computing & IT, UWS Nepean
Received on Mon Jun 15 1998 - 06:50:00 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:40:42 MST