【问题标题】:How can I invalidate a page in the browser cache from the client side?如何从客户端使浏览器缓存中的页面无效?
【发布时间】:2010-11-21 01:50:10
【问题描述】:

我需要客户端(使用 javascript)使其拥有的页面无效并获取新版本?

我以为我可以用标题做到这一切:Invalidating cached content, If-Modified Headers?

如果没有办法让浏览器刷新其当前缓存版本,而无需发出新请求(通过新 URL)......以便可以使用相同的原始 URL 请求查看更新的内容?

【问题讨论】:

  • 使 当前 页面无效,或者由对当前页面执行的操作确定的其他页面无效?我也对这个问题的答案感兴趣。
  • 我有一个示例测试,请参阅上面的 stackoverflow 链接...

标签: php javascript browser caching header


【解决方案1】:

如果你想重新加载当前页面,你可以这样做:

location.reload(true);

否则“传统”方式是在末尾添加一个随机查询字符串

'...?rnd=' + Math.random();

【讨论】:

  • 大声笑,我的和这个完全一样,我被否决了......很好
  • 我也投了反对票...看起来有人对所有答案都投了反对票。
  • 太愚蠢了...因为我们的答案是很好的答案...可靠,会解决问题。
  • 非常奇怪地对他们全部投反对票并且不发表评论......这就是生活
  • 还有,Zoidberg,别再喷我了!穿上裤子,佐伊德伯格!
【解决方案2】:

你不能用 javascript 来解决你的问题或使用方法 POST 而不是 GET 或使用nocache random parameter trick

如果您想了解更多信息,请参阅: Is it possible to cache POST methods in HTTP?

【讨论】:

  • 为什么它被否决了?我看不出我的回答有什么问题。
  • -因为您声明它不能用 javascript 完成。 - 因为使用 POST 代替 GET 并不过分放松。
  • @Zed,感谢您的评论。但至少我知道仅使用 javascript “使页面缓存无效”是不可能的,并且当我们使用 POST 方法时,我们强制 IE 获取最新版本,相应的 RFC 2616 在第 13 节(HTTP 中的缓存)中明确指出 POST 请求不应该被缓存。
  • 我不认为这就是提问者的意思,他只是想要一种方法来确保在客户端请求时不会获得页面的缓存版本。如果你必须知道,YUI 使用 Greg 和我建议的确切方法来避免浏览器缓存。如果您的页面不是由服务器端脚本生成的,有时这是必要的。 (如 json、html、css 等)
  • @Zoidberg,我当然知道 YUI(和其他 js 框架所做的)的方法!我是这个问题中第一个提出这个建议的人,我只是很想知道为什么即使我下面的每个问题都是一样的,我是唯一一个得到两个反对票的人 LOL
【解决方案3】:

当您引用页面时,在末尾添加一个随机变量。例如:

document.location.href = 'mypage.html?randomVar=454068934';

这将确保非缓存版本。我建议使用 javascript 生成的 guid。

【讨论】:

    【解决方案4】:

    我所做的是在 url 中传递一个随机参数。即,如果我需要获取 products.php,我用 products.php?rand=23443545 调用它。 这样缓存就不会干扰了。

    【讨论】:

    • 哦,好吧。当我开始写作时,没有答案。慢速打字机:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2021-02-10
    • 1970-01-01
    • 2017-01-19
    • 2017-02-04
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多