删除特定XHR调用的缓存



我有一个XMLHttpRequest做一个GET请求:

const xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "myapi/getThing", true)

通常,响应保持不变,所以服务器指示用HTTP响应头缓存它:

Cache-Control: public, max-age=604800, immutable

然而,现在我执行一个我知道会改变响应的动作,所以我再次调用XMLHttpRequest,但结果不会因为缓存而改变。

我如何使这个资源的下一个XHR调用不会使用浏览器缓存?

我已经尝试将Cache-Control设置为no-cache的请求:

xmlHttp.setRequestHeader("Cache-Control", "no-cache, no-store, max-age=0")

但是浏览器仍然使用缓存

目标是显式地不更改服务器设置的缓存策略,因为性能原因,所以没有验证之类的。这应该纯粹是客户端想要一个'新鲜资源'的需求。

一个有效的解决方案:
通过参数破坏缓存
假设服务器支持添加无用的参数

我认为这两种选择都可以工作,正如@Fudge Fudge建议的那样,缓存破坏是最常用的一种,例如:

xhtp.open("YOUR_METHOD","your_url?" + (Math.random() * 1e16).toString(16))

或者你可以使用Date.now()等,这取决于你,足够的随机数来保证唯一性就足够了。

另一种方法是:

xhtp.setRequestHeader("Cache-Control","no-cache, no-store, must-revalidate");
xhtp.setRequestHeader("Pragma","no-cache");
xhtp.setRequestHeader("Expires","0");

有时像Expires这样的旧头文件可以完成工作。

相关内容

  • 没有找到相关文章

最新更新