django - 使用 Django 设置缓存来解决 "page has expired"IE 问题

标签 django internet-explorer caching

我遇到了一个熟悉的问题。我正在使用 Django-0.97,并且无法升级——尽管正在使用的 Django 版本不应该在问题的原因中发挥任何作用。

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

IE 上的用户,一旦进入搜索结果页面中任何项目的项目详细信息页面,就会获得 familiar “网页已过期,请点击刷新按钮,yadda yadda yadda”错误他们点击浏览器上的“后退”按钮时。遗憾的是,该网站的大多数用户都使用 IE,不懂技术,并且提示这个问题。

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

任何可能有助于缓解问题的提示、建议将不胜感激。

谢谢。

更新(2009 年 7 月 20 日)

我使用 Fiddler 检查请求和响应的 HTTP header 。 IE 在 POST 请求中发送 Pragma: no-cache header 。作为请求结果生成的 HTTP 响应具有以下 header :

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

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

最佳答案

您可能会发现需要使用 PRG 模式 ( Post/Redirect/Get )。使用此模式,POST 的处理程序将:

  1. 执行繁重的计算,确定搜索结果,并将它们存储在用户的 session 中(或将它们存储在由用户 session 键入的数据库中)。
  2. 将带有重定向 header 的响应发送到幂等页面,然后浏览器在遵循重定向时使用 GET 获取该页面。

访问重定向到的页面时,服务器会显示搜索结果页面,该页面是根据 session 中存储的数据计算得出的,并且显示的 URL 与 POST 发送到的 URL 不同。您应该能够为此(搜索结果)页面使用正常的缓存 header ,具体取决于您的搜索结果的不稳定程度。

关于django - 使用 Django 设置缓存来解决 "page has expired"IE 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144562/

相关文章:

android - 以编程方式验证 Android odex 文件

MySQL创建索引错误

javascript - 尽管未使用自动播放标签,但HTML音频会在页面加载时播放

javascript - IE - IFRAMES/数据 URI

internet-explorer - 如何使 AngularJS TODO 示例在 IE9 中的工作方式与在 IE8、Chrome、Firefox 中的工作方式相同?

android - 应用了不同变换的 Picasso 缓存

rest - Guava LoadingCache 与 Kotlin 协程

django - Django表单始终显示错误 “This field is required”

python - 如何在 django 测试设置中创建 postgresql 扩展

html - 下拉菜单在 IE 中不起作用