Search squid archive

Re: How to make squid ignore max-age?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 18 Apr 2011 20:07:33 -0700, Yang Zhang wrote:
We're using squid (3.0.STABLE19-1ubuntu0.1) as an application cache
and we're trying to cache everything, for a long time, but max-age=0
is throwing off squid.

max-age=0 is called "reload" in HTTP terminology.


I have this refresh_pattern in squid.conf:

$ grep ^refresh_pattern /etc/squid3/squid.conf
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern . 525600 100% 525600 override-expire ignore-private
ignore-no-cache ignore-no-store


To quote Frankenstein
 "Why? whyyyy?"


I have the following response prepared to be sent from a dummy web server:

$ cat response
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Expires: 0
Pragma: no-cache
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html;charset=UTF-8
Date: Mon, 18 Apr 2011 10:06:26 GMT
Connection: close

Those headers say two things:
 * that cached content MUST NOT be supplied to the client. EVER.
* that any existing cached content also MUST be checked for updates on the next request.

Ignoring this requirement *from the server*. Again... why?


I can only imagine that you have fallen for the myth that "application caches" must always provide HITs. This is false and following it will break things for you in potentially nasty ways.

A cachable application will not send max-age=0 or "Expires: 0", both of which mean the object was obsolete the second it was produced.

Squid operating as a reverse-proxy will cache the replies and keep updating fresh copies as long as the server is available to present new ones. If the server dies an 5xx start coming back, the stale versions will start to be used. How long for and whether "must-revalidate" produces 4xx/5xx to the client depends on particular squid versions. I recommend you grab the newest release you can for the best HTTP/1.1 caching behaviour. there are still things we are fixing but work is ongoing so the newer the release the better things work. I maintain a PPA for Ubuntu (https://launchpad.net/~yadi/+archive/ppa) with newer versions.

<snip>

This response prevents anything from being cached; all requests for
http://localhost:8765 result in TCP_MISS.  I believe it's because of
the max-age=0 - once I remove that, this request is cached fine.  Yet
I had set override-expire in the refresh_pattern.
(Note that I don't think it's a must-revalidate/ignore-revalidate (new
in v3.1) problem - I can leave that in fine.)

However "We're using squid (3.0.STABLE19-1ubuntu0.1)" ... not a v3.1 release.

"ignore-revalidate" blocks the *client* from requesting a revalidation (max-age=0). But still obeys the server controls.


Any hints on how to make squid ignore the max-age=0?  I've pored over
the refresh_pattern documentation a bunch of times but still can't see
what's wrong.  Thanks in advance for any help.

If you must;
* "ignore-reload" to ignore the max-age=0 from either client or server IIRC. * "reload-into-ims" to convert a client max-age=0 ("force a new copy or die") into a soft IMS request ("new content or cached copy").

'must-revalidate' will still have affect until you are using a 3.1 release with the "ignore-must-revalidate". The result of revalidate should only be 304 (TCP_IMS_*) or 200 (TCP_REFRESH_UPDATE), not a "TCP_MISS" since the content being validated *is* in the cache.

Amos


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux