如何使用must-revalidate缓存HTML页面?

5
当使用must-revalidate缓存HTML页面时,这意味着浏览器必须检查由Last-ModifiedEtag定义的任何更新。然而,问题在于,在达到max-age之前,浏览器不会与网站建立任何连接以读取HTTP headers(以分析Last-ModifiedEtag)?
如何强制浏览器进行简短的连接以在从缓存加载页面之前读取(至少)HTTP readers?
我不理解must-revalidate的用法!难道它不应该在达到max-age之前检查更新吗?因为在达到max-age之后,浏览器将从网站读取并且永远不会使用本地缓存。
1个回答

10

是的,您对must-revalidate的理解是错误的:它表示在内容过期之前,缓存可能不会提供此内容,但必须在此之前进行重新验证。是的,理论上缓存(和浏览器)可以设置为即使内容过期,仍然提供页面,尽管标准规定它们应该在这样做时警告用户。

要强制浏览器与服务器重新检查您的页面,最简单的解决方案是将max-age=0添加到Cache-Control头中。这将允许您的浏览器在其缓存中保留页面的副本,但通过发送Last-ModifiedETag的内容与服务器版本进行比较,就像您想要的那样。

过去可以使用no-cache替代,但由于用户希望其表现得像no-store,因此浏览器逐渐将它们视为相同。

有关头部更多信息,请参阅HTTP/1.1 RFC第14.9节


1
非常有用的信息和实用指南,但我不明白一件事。你说“当缓存过期时,缓存可能不会提供此内容,但必须在此之前重新验证”。无论如何,即使没有“必须重新验证”,缓存在过期时也不会被提供。 - Googlebot
2
如果您重新阅读上述RFC中14.9.3的结尾,它提到缓存不仅可以配置为提供陈旧的响应,而且客户端(浏览器)可以使用max-stale来指示陈旧的响应是可以接受的。但是,它还提到必须附加一个“警告”头。 - Ben Deutsch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接