当前位置: 首页 > 面试题库 >

强制缓存控制:在Chrome浏览器上通过XMLHttpRequest在F5重新加载时不缓存

锺离俊雄
2023-03-14
问题内容

我想确保通过AJAX调用请求的数据是新鲜的,而不是被缓存的。为此,我发送标题Cache-Control: no-cache

但是Cache-Control: max-age=0如果用户按下F5键,我的Chrome版本33会覆盖此标头。

例。将test.html内容与您的网络服务器放在一起

<script>
    var xhr = new XMLHttpRequest;
    xhr.open('GET', 'test.html');
    xhr.setRequestHeader('Cache-Control', 'no-cache');
    xhr.send();
</script>

在网络标签上的Chrome调试器中,我看到了test.html AJAX调用。状态代码200。现在按F5重新加载页面。最长寿命:0,状态码304未修改。

Firefox表现出类似的行为。只是覆盖了请求标头,它会将其修改为Cache-Control:无缓存,F5上的max-age = 0。

我可以抑制吗?


问题答案:

另一种选择是在网址后附加一个唯一的数字。

<script>
    var xhr = new XMLHttpRequest;
    xhr.open('GET', 'test.html?_=' + new Date().getTime());
    //xhr.setRequestHeader('Cache-Control', 'no-cache');
    xhr.send();
</script>

时间戳不是很独特,但是对于您的用例来说,它应该足够独特。



 类似资料:
  • 问题内容: 有什么办法可以在页面上放置一些代码,以便当有人访问网站时,它会清除浏览器缓存,以便他们可以查看更改? 使用的语言:ASP.NET,VB.NET,当然还有HTML,CSS和jQuery。 问题答案: 如果这是关于和变化,一种方法是到“缓存无效”是通过附加像“ ”为每个版本的文件名。例如: 或者,在文件名之后执行此操作:

  • 问题内容: 我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此。当你更新这些文件之一但用户的浏览器继续使用缓存的副本时,这会导致出现问题。 问题是:强制用户浏览器在文件更改后重新加载文件的最优雅方法是什么? 理想情况下,该解决方案不会强制浏览器在每次访问页面时重新加载文件。我将发布自己的解决方案作为答案,但我很好奇是否有

  • 问题内容: 这些天,我的应用程序一直在变化,因为我们的团队现在正在运行快速更新。 由于缓存,我们的客户并不总是拥有最新版本的代码。 那么有没有办法强制浏览器清除缓存? 问题答案: 您可以使用一种非常简单的解决方案,其中包括将哈希值附加到脚本文件中。每次部署App时,您都会通过gulp /grunt任务自动为文件提供不同的哈希值。例如,您可以使用gulp-rev。我在所有项目中都使用了这种技术,并且

  • 问题内容: 因为我以前使用过jQuery的AjAX方法,所以我对XMLHttpRequests较新。但是,我需要在网络工作者中工作,现在我必须使用经典的XMLHttpRequest来解决性能问题。 我正在尝试从jquery 重建-property。如果应该禁用缓存,请添加以下内容: 但是,如果我想强制缓存(不是阻止),应该设置哪个标头? 问题答案: 您可以设置各种标头来鼓励缓存,但是它们(包括您使

  • 在服务器迁移过程中,一个新的nginx配置缺少缓存控制指令。因此,我们最终得到了缓存的,这对我们的SPA非常不利,如果我们部署新代码,它将不再刷新。我们需要index.html不被缓存。 这是我们的(不好的)nginx配置,几天来一直在线: 我们修复了我们的配置: 问题 过去几天内访问过我们网页的客户端缓存了一个旧索引。html。我们如何强制他们的浏览器删除缓存的?

  • 问题内容: 背景 我正在为两个公益网站编写和使用一个非常简单的基于CGI的(Perl)内容管理工具。它为网站管理员提供事件的HTML表单,这些表单将填写字段(日期,位置,标题,描述,链接等)并保存。在该表格上,我允许管理员上传与事件相关的图像。在显示表单的HTML页面上,我还显示了上传图片的预览(HTML img标签)。 问题 当管理员想要更改图片时,会发生此问题。他只需要点击“浏览”按钮,选择一