【问题标题】:AWS Cloudfront. Force browser to revalidate but not CDNAWS 云端。强制浏览器重新验证而不是 CDN
【发布时间】:2023-02-07 22:27:06
【问题描述】:

我有一个名为sdk.js 的文件。此文件名未以任何方式进行版本控制或哈希处理,因为我们不控制嵌入它的站点,因此名称必须保持一致。

浏览器应缓存此文件,但在使用其副本之前首先通过 Cloudfront 不断重新验证。据我了解,这是 Cache-Control: no-cache 指令指定的行为。

我正在使用 Cache-Control: no-cache 标头将文件上传到 S3,以便 Cloudfront 实现此行为。

我遇到的问题记录在这里:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html#stale-if-error:~:text=Origin%20adds%20Cache%2DControl%3A%20no%2Dcache%2C%20no%2Dstore%2C%20and/or%20private%20directives%20to%20the%20object

基本上说,这个指令的存在也会使 CDN 在服务文件之前每次都与源重新验证,即使 Cloudfront 最小 TTL > 0。

在我的研究中,我注意到有 Cache-Control 指令可以独立控制浏览器和 CDN 的 TTL:s-maxagemax-age那么是否有指令或设置可以分别控制浏览器和 CDN 的重新验证行为?.

【问题讨论】:

    标签: amazon-web-services caching amazon-cloudfront cache-control cache-invalidation


    【解决方案1】:

    您可以通过同时使用 s-maxage 和 max-age 缓存控制标头来明确地实现这一点。来自 http rfc -

    “s-maxage”响应指令表明,在共享缓存中, 此指令指定的最大年龄覆盖最大年龄 由 max-age 指令或 Expires 标头字段指定。 s-maxage 指令还暗示了 代理重新验证响应指令。

    这意味着像 varnish、cloudfront、cloudflare 这样的反向代理/缓存可以有一个不同于浏览器缓存的缓存年龄。并且您可以将 s-maxage 设置为比 max-age 更高的值,因此与浏览器相比,CDN 将缓存更长的时间。

    【讨论】:

      【解决方案2】:

      解决方案是‘s-maxage=31536000, max-age=1200, must-revalidate’。

      Cloudfront 将存储任意高的“s-maxage”,浏览器将存储较低的“max-age”。

      陈旧的项目在被允许使用其存储的版本之前使用“必须重新验证”来检查来源。而且由于浏览器比云端更快地失去新鲜度,这将导致浏览器在每个“max-age”时询问云端,但云端在“s-maxage”之前不会询问 S3。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 2018-08-01
        • 2016-07-31
        • 2012-11-04
        • 2016-01-23
        • 2020-06-18
        • 2014-05-03
        相关资源
        最近更新 更多