【问题标题】:Caching if visit same page twice: back button only shows data from second viewing两次访问同一页面时缓存:后退按钮仅显示第二次查看的数据
【发布时间】:2012-11-28 08:49:17
【问题描述】:

我正在创建一个网页,但在页面上的后退按钮如何工作时遇到了一些问题。我猜我需要设置一些标题,但不知道哪些或如何。这就是我所看到的:

(1) 转到显示论坛主题的主页。

(2) 单击链接可转到显示主题的页面。在此页面上,向下滚动并添加评论。

(3) 评论通过表单保存(编辑:我尝试过 POST 和 GET 表单)。现在通过重定向重新加载相同的线程页面。评论显示。

在 Chrome 中:此时按下后退按钮仍会显示评论已添加。看起来好像后退按钮不起作用。但是,页面像 (2) 一样向下滚动。再次单击后退按钮会显示主页。所以,后退按钮确实让我返回,但如果同一个页面出现两次,它会两次显示新数据。

在 IE9 中:按返回按钮显示“网页已过期”。再次单击它会将我带到主页。

如何更改此行为,以便后退按钮真正显示上一页?

(我这样做的原因是我从主页跟踪我有多少页面,以便我可以生成“返回主页”链接。(2)上面有 history.go(-1 ) 和 (3) 上面有 history.go(-2)。如果用户从 (3) 按下浏览器后退按钮,这将不起作用,因为它现在距离主页 1,但显示来自 ( 3).

【问题讨论】:

  • 使用纯HTML?尝试通过 JavaScript 在 cookie 中设置标志。现代浏览器处理具有不同行为的“返回”按钮。

标签: html caching http-headers


【解决方案1】:

在步骤 (3) 中,您可能有一个返回线程页面的新 HTML 的 POST。相反,POST 应该重定向到线程页面的 GET。

http://en.wikipedia.org/wiki/Post/Redirect/Get

【讨论】:

  • cmets 表单是一个 POST。保存评论后,我会使用 GET 重定向返回主题页面。我刚刚尝试将 cmets 表单更改为 GET。结果是一样的。我从您的链接中看到,浏览器这样做是为了避免返回表单,然后可以提交两次。但我仍然希望能够做到。
  • 其实最好还是按照原来的样子使用POST。而且您似乎已经在遵循 POST/REDIRECT/GET 模式,所以我想这不是问题。
猜你喜欢
  • 2010-10-25
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多