Django 返回时将网站缓存到浏览器

Django 返回时将网站缓存到浏览器,django,http,nginx,Django,Http,Nginx,我有一个网站的url/页面,我希望缓存到浏览器中,因此每当用户离开该页面,然后按下浏览器的后退按钮时,我根本不希望该请求转到django,而是提供浏览器中页面的缓存版本。此外,我不能使用在web服务器和Django之间缓存页面的解决方案,因为每个用户对他们可以看到的数据都有不同的权限。 所以我在我的nginx配置中添加了这个: ... location /search { expires 300s; add_header Cache-Control "private"; ...

我有一个网站的url/页面,我希望缓存到浏览器中,因此每当用户离开该页面,然后按下浏览器的后退按钮时,我根本不希望该请求转到django,而是提供浏览器中页面的缓存版本。此外,我不能使用在web服务器和Django之间缓存页面的解决方案,因为每个用户对他们可以看到的数据都有不同的权限。 所以我在我的nginx配置中添加了这个:

...
location /search {
    expires 300s;
    add_header Cache-Control "private";
...
这很有效,50%的时间:)。我怎样才能使它始终有效

每当用户离开该页面,然后按下浏览器的后退按钮时,我根本不希望该请求转到django,而是提供浏览器中页面的缓存版本

对于某些浏览器,这是默认行为-如果您在服务器上没有设置缓存指令,那么它不仅会在内存中保留响应的副本,而且会保留整个呈现的页面,因此,当您单击“上一步”按钮时,它可以立即显示

但是,如果要显式指示浏览器缓存响应,可以在缓存控制标头上使用max age指令。设置

Cache-Control: max-age=3600
这是一种比使用“Expires”标头更现代、更可靠的方法,特别是对于小持续时间。如果用户浏览器的时区设置不正确,“Expires”可能根本不起作用,但“max age”仍应起作用

如果您为每个人提供不同版本的页面,您也可以添加“private”以防止代理缓存(如您的示例所示):

注意:不能强制浏览器始终使用缓存。如果您注意到有时它不使用缓存,则可能是:

  • 缓存中的项已过期。您只给了它5分钟的时间,因此在请求进入缓存5分钟后,如果您再次请求它,它将通过请求发送到远程服务器-即使在这段时间之间有请求

  • 浏览器缓存已满,某些项目已清除

  • 出于某种原因,浏览器认为或被配置为认为无论缓存指令如何,都不应缓存响应

  • 用户按了重新加载

  • 客户端和服务器之间的代理剥离了缓存控件或其他标头

Cache-Control: private; max-age=3600