【问题标题】:How to cache a HTML page with must-revalidate?如何缓存必须重新验证的 HTML 页面?
【发布时间】:2012-04-17 01:49:06
【问题描述】:

当缓存带有must-revalidate 的HTML 页面时,这意味着浏览器必须检查Last-ModifiedEtag 定义的任何更新。但是问题是在max-age之前,浏览器不会和网站建立任何连接来读取HTTP头(分析Last-ModifiedEtag)?

在从缓存加载页面之前,如何强制浏览器建立一个简短的连接以读取(至少)HTTP 阅读器?

看不懂must-revalidate的用法!在max-age 之前检查更新不是它的责任吗?因为在到达max-age之后,浏览器会从网站中读取,并且不会使用本地缓存。

【问题讨论】:

    标签: caching http-headers browser-cache etag last-modified


    【解决方案1】:

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

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

    过去您可以添加no-cache,但由于用户一直期望它的行为与no-store 相同,浏览器逐渐将它们视为相同。

    查看HTTP/1.1 RFC, section 14.9 以获取有关标头的更多信息。

    【讨论】:

    • 非常有用的信息和实用指南,但我不明白一件事。您说“缓存在过期时可能不会提供此内容,但必须在此之前重新验证”。在任何情况下,即使没有must-revalidate,缓存也不会在过期时提供。
    • 如果你重新阅读上面 RFC 中 14.9.3 的结尾,它提到不仅可以将缓存配置为提供过时的响应,客户端(浏览器)可以使用 max-stale 来指示过时的响应反应很好。它还提到必须附加 Warning 标头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2017-07-15
    • 1970-01-01
    • 2017-03-25
    • 2017-11-20
    • 2012-08-20
    • 2011-05-01
    相关资源
    最近更新 更多