Django缓存:缓存预热时重新加载浏览器缓存

Posted

技术标签:

【中文标题】Django缓存:缓存预热时重新加载浏览器缓存【英文标题】:Django caching : reload browser cache when cache is warmed up 【发布时间】:2014-02-06 08:55:56 【问题描述】:

我使用 Angular 作为前端,使用 Django 作为后端,并配置了内存缓存。

我面临的问题是 AJAX 调用 angular make。 一旦我使用了

cache.flush_all()

我从浏览器中点击了相同的 url,第一个 get 请求得到确认并发送新数据。但后来我的应用程序涉及发送多个 ajax 请求来更改视图。这些视图始终由浏览器缓存提供。(直到我明确清除缓存或按 Ctrl+R)。

我不想完全禁用缓存,我只想让浏览器在刷新旧缓存时获得更新的缓存。

我尝试使用 cache_control 装饰器但没有成功。

@cache_control(must_revalidate=True)

这是我的角度代码:

$http(method: method, url:url, data:postData ).
          success(...

另外请注意,我无法使用 max_age 参数。因为它也会丢弃新的缓存,并且请求将一直处理。取而代之的是,我需要浏览器获取我在刷新后已经预热的缓存。

这是我用 manage.py runserver 测试的。 prod环境是gunicorn+nginx。 如果需要任何额外信息,请发表评论。

【问题讨论】:

为什么不使用 never_cache 装饰器完全禁用浏览器缓存? never_cache 似乎也禁用了我的服务器端缓存。 【参考方案1】:

建议使用never_cache 装饰器。它通过设置响应标头来禁用浏览器中的缓存,如source 中所述:

def add_never_cache_headers(response):
    """
    Adds headers to a response to indicate that a page should never be cached.
    """
    patch_response_headers(response, cache_timeout=-1)

【讨论】:

以上是关于Django缓存:缓存预热时重新加载浏览器缓存的主要内容,如果未能解决你的问题,请参考以下文章

当我重新加载网格和存储时,extjs 缓存具有相同名称的图片

Busting Chrome缓存可用于浏览器同步重新加载

redis缓存预热缓存更新与缓存降级

缓冲预热缓冲降级等问题

django开发中利用 缓存文件 进行页面缓存

django-缓存