【问题标题】:Is there a way to enalble public cache and disable private cache in the same time?有没有办法同时启用公共缓存和禁用私有缓存?
【发布时间】:2022-01-04 11:16:32
【问题描述】:

我们已启用云端缓存。 为了实现云端缓存功能,我们添加了Cache-Control 标头以响应特定路径,例如example.com/page/1。响应头包括:

cache-control: public, max-age=31556952

似乎通过添加此标头,我也启用了浏览器的(私有)缓存,而不仅仅是公共缓存(代理、CDN 等)。我想达到的效果是让公共缓存工作,但禁止私有(浏览器,用户代理)缓存。那可能吗?如果是 - 如何?

【问题讨论】:

    标签: http caching header


    【解决方案1】:

    不,这是不可能的。 public 指令 means 表示“任何缓存都可以存储响应”。

    很难想象一个用例允许对每个用户进行缓存(公共缓存),同时禁止对任何特定用户进行缓存(私有缓存)。

    【讨论】:

    • 可以通过cookies在cloudfront(CF)上实现每用户粒度缓存。所以我们使用会话 cookie + URL(一种复合标识符)来缓存用户特定的视图。但是浏览器缓存不尊重这个 cookie 并破坏了过程。例如,所有“匿名用户”(那些不发送会话 cookie 的用户)都会显示相同版本的页面 - 没关系。问题是,当登录用户注销时,她继续看到订阅者页面,因为浏览器缓存被命中而 CF 没有
    • @Hairi:我不知道您指的是什么 Cloudfront 机制,但标准 HTTP 缓存已经有办法处理它,即 Vary 响应标头。您应该在用户特定的响应中设置 Vary: Cookie,然后清除对注销请求的响应中的 cookie。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多