如果服务器返回caching控制=公共没有最大年龄或过期,可以代理caching它永远吗?

如果服务器返回Cache-Control = public且没有Max-Age或Expires,那么代理服务器可以永久caching它吗? 代理或规范有这些值的内置默认值? 服务器这样做总是错的吗? 谢谢。

Cache-Control public Content-Length 10874 Content-Type text/html; charset=utf-8 Server Microsoft-IIS/7.0 X-Powered-By ASP.NET X-AspNet-Version 4.0.30319 Date Thu, 24 Mar 2011 18:45:52 GMT 

是的,代理人总是build立在默认情况下,绝大多数网站甚至不提供有关可以存储多久的信息,所以他们必须有一个默认的,他们可以使用,以防止更新的网站不会来。

请记住,caching与重新validation不同。 代理服务器可以永远caching一个对象,但是每当对该对象发出一个请求时,就用原始服务器对它进行重新validation(即做一个If-Modified-Since或者If-Match请求,它允许源服务器指出对象hasn没有改变没有返回对象)。 如果源服务器指示到期(即发送ExpiresCache-Control: max-age头),则代理可以认为该对象在那个时期是“新鲜的”,这意味着它不需要重新validation它。 如果一个对象不是新鲜的,它被认为是“陈旧”,这意味着它必须重新validation对象。

技术上,代理服务器应该将对象视为陈旧,如果原始服务器不表示过期,但似乎大多数代理服务器将对象视为新鲜的一段时间。 Squid的默认行为似乎是

 refresh_pattern . 0 20% 4320 

这意味着如果服务器发送Last-Modified头,则该对象在当前和最后修改时间之间的差异的20%被认为是新鲜的,直到最多4320s(3h),但是如果Last-Modified头部不是新鲜的没有发送。