代码之家  ›  专栏  ›  技术社区  ›  ayaz

使用Django设置缓存以解决“页面已过期”IE问题

  •  2
  • ayaz  · 技术社区  · 15 年前

    我有一个熟悉的问题。我使用的是Django-0.97,无法升级——尽管所使用的Django版本不应成为问题的原因。

    我有一个搜索视图,它向用户显示一个表单,并且在通过POST提交表单时,执行大量计算并显示这些计算结果生成的项目列表。用户可以单击其中任何项目的“更多信息”链接以查看项目详细信息页面。

    ,当它们位于搜索结果页面中任何项目的项目详细信息页面上时,获取 familiar 什么时候 他们击中了目标“

    认为建立一个 cache backend 可以解决这个问题,我配置了一个简单的缓存后端。我尝试了每站点缓存和每视图缓存,但没有效果。现在,我不太确定我是否正确设置了缓存。

    任何有助于缓解问题的提示和建议,我们都将不胜感激。

    谢谢

    更新(2009年7月20日)

    我已经使用Fiddler检查了请求和响应的HTTP头。我正在发邮件 Pragma: no-cache POST请求中的标题。作为请求结果生成的HTTP响应具有以下标头:

    Cache-Control: public, max-age=3600
    Date: someDateHere
    Vary: Cookie
    

    是的,我没有使用PRG模式。

    2 回复  |  直到 15 年前
        1
  •  2
  •   EricLaw    15 年前

    在RFC2616下,“POST”不是幂等方法,这意味着浏览器不会重新发送请求,除非用户确认重新发送。因此,为了防止出现提示,必须确保客户端缓存页面。

    为此,请使用缓存控制标头: http://www.fiddler2.com/redir/?id=httpperf 并确保没有发回任何Vary或Pragma:no cache头: http://blogs.msdn.com/ieinternals/archive/2009/06/17/9769915.aspx

    捕获HTTP帖子的响应头(例如使用Fiddler)并用它们更新您的问题,这将对您有所帮助。

        2
  •  2
  •   Vinay Sajip    15 年前

    您可能会发现需要使用PRG模式( Post/Redirect/Get )。使用此模式 POST

    1. 执行繁重的计算,确定搜索结果,并将其存储在用户会话中(或存储在用户会话键入的数据库中)。
    2. 将带有重定向头的响应发送到幂等页,然后浏览器使用 GET ,当它跟随重定向时。

    邮递 他被解雇了。您应该能够为此(搜索结果)页面使用普通缓存标题,具体取决于搜索结果的波动性。