onbeforeunload处理程序真的会阻止我的页面缓存吗?

Would an onbeforeunload handler really stop my page caching?

本文关键字:缓存 我的 程序 处理 真的 onbeforeunload      更新时间:2023-09-26

2007年,Patrick Hunlock在一篇题为《用Javascript掌握返回按钮》的文章中声称,仅仅在页面中包含一个onbeforeunload处理程序就会停止缓存。(我猜是浏览器缓存。)他对此非常强调:

只要有一个unbeforeunload事件处理程序——不管它是否实际做任何事情,不管你是否产生一个对话框,即使整个函数声明完全由{}组成——只要定义一个事件处理程序将阻止页面被缓存——永远。

事实上,即使您允许页面缓存,页面也会被缓存不被缓存。有一个onbeforeunload事件意味着页面将被加载每次访问都要重建。 javascript将重新运行,服务器端脚本将重新运行,页面将被构建,就像用户是第一次点击它,即使用户是第一次点击"后退"或"前进"按钮即可进入页面。

有趣的是,除了一两个人提到了汉洛克的帖子,我找不到任何其他地方提到这一点。有人能解释一下这个问题吗?这是真的吗,或者我可以安全地使用这个事件吗?

对于考古学家来说,这是Firefox 1.5中引入的一个特性。

注意不要混淆缓存和浏览器历史记录(也称为存储)-页面元素可以同时包含在两者中。如果期望的行为是强迫浏览器重新加载HTML页面从服务器,如果使用前进和后退导航按钮(例如,因为页面显示敏感信息,或内容被改变使用Javascript或Ajax调用),那么应该使用Cache-control no-store -或者更好地使用no-storeno-cache

进一步阅读:

    为什么不缓存和不存储都应该在HTTP响应中使用?
  • OWASP:浏览器缓存漏洞测试