Django的web / http缓存的默认行为

时间:2012-05-08 18:35:21

标签: django http-caching

我的问题是指django docs的this section

在那里,有一段写着:

  

请注意,缓存中间件已使用CACHE_MIDDLEWARE_SECONDS设置的值设置缓存标头的max-age。如果在cache_control装饰器中使用自定义max_age,则装饰器将优先,并且标头值将正确合并。

我的解释是,默认情况下,来自django server-end的响应将具有" Cache-Control:max-age = 600"在他们的http标题部分,除非使用一些与http-cache相关的装饰器来修改" Cache-Control"报头中。

我进行了一项快速实验,以验证我的解释。令人惊讶的是,当在视图上没有使用与http-cache相关时,生成的响应具有 NO" Cache-Control"总而言之

为什么我看到的官方文档描述的结果不同?我是否误解了概述的段落?

此外,当没有" Cache-Control"响应中的标题,我可以安全地假设没有涉及http缓存(即不会使用缓存响应)吗?

1 个答案:

答案 0 :(得分:3)

“默认情况下”不会发生这种情况。 Django必须满足两个条件才能附加Cache-Control标题:

  1. 您必须设置缓存后端,CACHES(Django 1.3+)或BACKEND(Django< 1.3)。

  2. 您必须将缓存中间件添加到MIDDLEWARE_CLASSES

  3. 有关详细信息,请参阅docs

    对于没有Cache-Control标题的缓存,这通常会成为Web浏览器或客户端的决定。 Cache-Control给出必须遵循的指令,但浏览器通常已经自行缓存,因此它的真正目的通常是在某些情况下阻止缓存,而不是启用它。