![缓存控制最大年龄问题](https://linux22.com/image/560716/%E7%BC%93%E5%AD%98%E6%8E%A7%E5%88%B6%E6%9C%80%E5%A4%A7%E5%B9%B4%E9%BE%84%E9%97%AE%E9%A2%98.png)
我试图从下面了解 Cache-Control:max-age=0 配置:
这是点击刷新后我们的着陆页上的静态图像的 HTTP Live Headers 片段:
If-Modified-Since: Sat, 23 Jul 2011 02:05:28 GMT
If-None-Match: "21246-eb05-4a8b30415ea00"
**Cache-Control: max-age=0**
HTTP/1.1 304 Not Modified
Date: Tue, 06 Sep 2011 20:59:29 GMT
Server: IBM_HTTP_Server
Connection: Keep-Alive
Keep-Alive: timeout=6
Etag: "21246-eb05-4a8b30415ea00"
我看到我们的Cache-Control
节目了max-age=0
。我发现了这样的解释:
缓存控制:max-age
这是 HTTP 1.1 中与 HTTP 1.0 中早期 Expires 标头相同的内容。它隐式地告诉浏览器它可以缓存页面,但如果超过 max-age,则必须与服务器重新验证。将 max-age 设置为零可确保页面永远不会从缓存中提供,但始终会与服务器重新验证。
如果这是正确的,我们就不应该从浏览器缓存中提取图像,如果你看看304
上面的内容,这是不正确的吗?这max-age=0
到底是什么意思?
我们没有在 Apache httpd.conf 中手动配置任何缓存配置,因此我假设我们使用缓存/etags 的默认值。
答案1
关键在于您发布的解释的最后一句话:
将 max-age 设置为零可确保页面永远不会从缓存中提供,但始终会根据服务器重新验证。
在您粘贴的示例中,客户端已将资产保存在缓存中,因此可以提供服务。但是,由于最大使用期限,客户端将首先联系服务器并询问是否已修改。从您粘贴的服务器响应来看,资产似乎没有更改,并且服务器正确地“重新验证”(304) 客户端版本正确(无需实际通过网络发送资产,因此有一些好处)。
如果 max-age 更高,浏览器就可以从缓存中提供资产,而无需向服务器询问任何内容。