> Dear SQUID Community, > > it seems as if SQUID is not dealing correctly with "min-fresh" and > "max-stale": > > Currently we are evaluating the use of SQUID-2.6-STABLE4. It all seems > to work pretty well, but just "min-fresh" and "max-stale" is not > working. Our client agent wants to guarantee to get data that is fresh > for a specific amount of time. So we provide "min-fresh=3500" and > "max-stale=0". To verify SQUID's behaviour we have programmed an origin > server the always responds with some static headers and entity data, and > a client that requests exactly that information, via SQUID as a proxy. > The client uses the Cache-Control header with a min-fresh=3500 and > max-stale=0 value, and the server is always sending data with a > max-age=3600 value. But the client gets from SQUID a 200 OK response > having max-age=3600 and Age=502! So, the current age of 502 plus the > desired min-fresh of 3500 is 4002, minus the max-stale of 0 still is > 4002, what is much more than the max-age of 3600 -- so the request > cannot be satisfied without a warning, since the response will not be > fresh long enough! So we expect to get at least a Warning header. But > there is none! It looks like SQUID just ignores the min-fresh=3500 and > max-stale=0 headers! > > The HTTP/1.1 specification says: > 13.1.2 Warnings > Whenever a cache returns a response that is neither first-hand nor > "fresh enough" (in the sense of condition 2 in section 13.1.1), it MUST > attach a warning to that effect, using a Warning general-header. > also it says: > 13.1.1 Cache Correctness > If a stored response is not "fresh enough" by the most restrictive > freshness requirement of both the client and the origin server, in > carefully considered circumstances the cache MAY still return the > response with the appropriate Warning header. > > In the default case, this means it meets the least restrictive freshness > requirement of the client, origin server, and cache (see section 14.9) > > So for me it looks as if SQUID is buggy, since it does not add the > mandatory Warning header. Can that be true? Or do I have to enable some > switch like "HTTP/1.1-Compliance = YES"? Squid 2.6 is HTTP/1.0 only. For any HTTP/1.1 stuff you will need Squid 2.7 and its experimental support. As for the cache controls, someone more knowledgeable will hopefully speak up. Amos