HTTP header "expires" 不从缓存中呈现页面

HTTP header "expires" does not render the page from cache

我不是很熟悉允许您管理缓存的所有元数据 client-side 所以我尝试用 HTTP header "expires"[=13 做一个简单的例子=]

使用以下代码:

<!DOCTYPE html>
<html>
    <head>
            <meta charset="utf-8" />
            <meta http-equiv="expires" content="mon, 18 Jul 2016 1:00:00 GMT" />
            <title>MY TITLE</title>
    </head>

    <body>
MY BODY
    </body>

</html>

当我第一次加载页面时(之前清除了缓存)。页面保存在缓存中,但是当我用 "MY BODY2" 更新我的 body 并重新加载页面时,页面显示 "MY BODY 2"。浏览器应该从缓存中获取页面("MY BODY"),因为到期时间是 2016 年 7 月,不是吗?

感谢您帮助我解决这个问题

这取决于您重新加载页面的方式。

你基本上有三个选择:

  1. 浏览到另一页,然后返回。这应该使用缓存。
  2. 按F5 或重新加载但是。这是一个显式重新加载,因此将检查服务器是否有新版本 - 即使它已被缓存 - 如果有更新版本则下载它。
  3. 强制重新加载(在某些浏览器中为 Ctrl+F5)。这表示忽略缓存并从头开始下载(即使缓存版本看起来与服务器将发送给您的版本相同)。

我怀疑您已经完成了选项 2,但没有意识到这会检查服务器并假设它会在仍然有效的情况下使用缓存。它实际检查服务器的原因是,当用户怀疑内容已更改或想要 re-download 时,通常会重新加载(例如,如果页面未正确呈现)。

另外需要注意的是,HTML 中的 meta headers 不如服务器设置的 http 响应 headers 好,原因有很多,包括浏览器支持的原因。

最后,值得打开开发人员工具(例如 Chrome 中的 F12)并检查网络选项卡以查看发生了什么,但在这种情况下,请确保您没有勾选 "Disable cache"它是开放的(在 Chrome 中默认勾选,因为大多数开发人员不想在开发时使用缓存)。