缓存控制最大年龄问题

缓存控制最大年龄问题

我试图从下面了解 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 更高,浏览器就可以从缓存中提供资产,而无需向服务器询问任何内容。

相关内容