javascript中的浏览器历史记录

时间:2011-06-30 11:24:05

标签: javascript navigation

我在onClick的HTML按钮上写下以下内容;

javascript:history.go(-1)

它没有进入历史页面。相反,它显示以下内容......

网页已过期

最有可能导致:此网页的本地副本已过期,网站要求您再次下载。

您可以尝试的内容:      单击工具栏上的“刷新”按钮以重新加载页面。刷新后,您可能需要再次导航到特定网页,或重新输入信息。

enter image description here

3 个答案:

答案 0 :(得分:0)

这与JavaScript无关,它与去往以前包含POST数据的页面有关(请参阅Boldewyn的答案),或者与正在设置的页面发送的HTTP标头有关防止缓存,特别是通过Cache-Control标题。请注意,如果您在localhost上执行此操作,则可能会遇到与将其上传到服务器时不同的行为。

See here以获得良好的参考。在任何情况下我都会复制重要的部分:

  

有用的Cache-Control响应头包括:

     

max-age = [seconds] - 指定表示将被视为新鲜的最长时间。与Expires类似,此指令与请求的时间相关,而不是绝对的。 [seconds]是您希望表示新鲜的请求之间的秒数。

     

public - 将经过身份验证的响应标记为可缓存;通常,如果需要HTTP身份验证,响应将自动为私有。

     

private - 允许特定于一个用户(例如,在浏览器中)的缓存来存储响应;共享缓存(例如,在代理中)可能不会。

     

no-cache - 强制缓存每次在释放缓存副本之前将请求提交到源服务器进行验证。这有助于确保认证(与公众结合),或保持严格的新鲜度,而不会牺牲缓存的所有好处。

     

例如:

Cache-Control: max-age=3600, must-revalidate

答案 1 :(得分:0)

当收到带有HTTP POST请求的上一页时,情况很可能就是这种情况。在JavaScript级别上几乎没有什么可以对付它。

问题是,POST请求用于更改内容。因此,如果浏览器再次发送相同的请求,它将再次提交相同的更改信息。这可以像双贴注释一样简单,也可以像两次转移10000美元一样具有破坏性。

如果您可以控制上一页,则必须执行以下操作:

Browser: POST prev-site
You -> deliver a redirect to prev-site (hence force a GET request)
       instead of directly showing it
Browser: GET prev-site
User: Clicks link to this-site
Browser: GET this-site
User: history.go(-1)
Browser: GET prev-site
All: rejoice!

答案 2 :(得分:0)

要避免“网页已过期”消息,您可以在元素中添加method ='get',以便从POST切换到GET。

请注意,这会将表单参数放在URL而不是HTTP请求正文中。

在相关的说明中,当相同的确切操作通过HTTP成功时,“网页已过期”消息似乎通过HTTPS发生。