如何在通过XMLHttpRequest()下载时避免使用缓存数据

4
我正在编写Chrome浏览器的扩展程序(并希望将其移植到Firefox)。该扩展程序通过XMLHttpRequest从我的服务器下载配置文件 - 一个xml文件。我发现它只会下载一次文件,随后的每个调用似乎都使用缓存的原始版本。无论我是否更改服务器上的文件都没有关系。
我读到可以尝试:
xmlhttp.setRequestHeader('Pragma','Cache-Control: no-cache');
因此我已经这样做了,但似乎没有任何区别。唯一能获取新文件的方法似乎是删除浏览器缓存 - 这显然不是对我不断增长的用户的解决方案。
这似乎是一个我不会是第一个遇到的问题 - 鉴于缓存规则似乎支持这种无法轻易避免的策略,我的问题是,有什么更好的设计?有我不知道的最佳实践吗?我应该以某种方式进行推送而不是拉取吗?
1个回答

4

一种简单的方法是向请求添加一个包含时间的无用参数。由于时间往往向前而不会后退,您可以相当有把握地确保您的查询是唯一的,因此不会被缓存。

例如(假设 URL 在字符串url中):

url += '?_time=' + (new Date()).getTime();

如果您的URL已经有查询参数,

url += '&_time=' + (new Date()).getTime();

你甚至不需要添加 '_time',只需执行 url += '?' + (new Date()).getTime() - Midas
1
@Midas 嗯,是的。您可以随意命名参数(只要不存在一个)。我只是在帮助一些系统管理员避免被他们的Apache日志搞糊涂! - lonesomeday
jQuery中的ajax库使用_(下划线)作为变量参数的名称,以强制“不缓存”。请参见https://dev59.com/Y3VC5IYBdhLWcg3w1E7w#168977。 - Cheeso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接