On tor, 2008-06-05 at 02:48 +0800, howard chen wrote:

> The following is my understanding (correct me if I am wrong)
> 
> 1. When Apache send Expire =... thru Squid, if it is future time, then
> client won't issue any request to the server side again for the same
> resource (unless you press F5 to issue max-age=0), so mod_expire has
> nothing to do with squid, it is client level stuffs.

Expires and Cache-Control: max-age response headers are sisters and
perform the exact same function. If both are given Cache-Control:
max-age have higher priority.

> 2. Squid caching basically depends on Last Modified header (maybe also
> Etag, but I have disabled all)

Squid's ability to validate a stale entry depends on Last-Modified.

> 1. If I only send Last Modified, but no Expire, how do Squid know the
> freshness time if it don't contact the backend?

By refresh_pattern rules.

> Or should I always
> send Expire with Last Modified or maybe use refresh plattern / PURGE /
> set max-age=0 ?

For content you know changes often, or where freshness really really is
important respond with Cache-Control: max-age=<some low number meeting
your freshness requirement>, combined with Last-Modified. This will make
the whole chain of caches (browser, proxies, reverse proxy) to check the
objects for changes.

If you want different rules for proxies (including your squid reverse
proxy) and browsers then use "Cache-Control: s-maxage=nn" for the
setting that should apply to proxies.

It's generally a lot better if you make the web server send the proper
headers than trying to tweak things using refresh_pattern. Proper
headers works for all, refresh_pattern just for your Squid..


Regards
Henrik

Reply via email to