Safari/Webkit的后退按钮从缓存加载页面,而不是一个新的副本

Back button on Safari/Webkit loading a page from cache instead of a fresh copy

本文关键字:副本 一个 Webkit 按钮 加载 缓存 Safari      更新时间:2023-09-26

我遇到了关于Mac OSX系统上Safari/Webkit的"奇怪"行为的问题,这与后退按钮的功能有关,而在浏览器上禁用了javascript

我的场景是一个web应用程序,它包含一个登录页面,在成功登录后,将用户引导到page1。如果用户退出page1,那么他/她将被重定向到page2。会话外和未经身份验证的page1请求通过302 HTTP响应被重定向到初始登录页面。

还值得一提的是,对page1请求的响应中包含以下HTTP标头,以防止浏览器缓存该页:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Thu, 1 JAN 1970
Pragma: no-cache

从page1成功登出后,用户被重定向到page2。如果此时用户决定单击后退按钮,则浏览器将从其缓存加载page1,而不是再次访问服务器以检索新的副本。请不要,这一切都发生,而javascript在Safari中被禁用,使其启用产生从web服务器重新加载page1的预期结果,从而使用户获得重定向到初始登录页面

我尝试在页面主体标签上设置卸载事件处理程序,以防止Webkit将页面加载到其页面缓存中,但这似乎没有解决问题。

其他主流浏览器,FF, IE和Chrome似乎在JS和非JS情况下都能产生预期的结果。

我在这里错过了什么,或者这听起来更像是Safari/WebKit的一个bug ?

欢呼;

这是因为Webkit/Safari的页面缓存特性。你可以在下面的链接

找到更多关于这个的信息

在iOS 5 Safari中导航返回/卸载事件未触发时页面缓存的问题

作为快速修复,您可以尝试向窗口卸载事件添加一个空函数。当出现这种情况时,Webkit/Safari将不会将页面添加到pageCache中——让页面像其他浏览器一样正常加载。