使用fetch('somefile.json')
,可以请求从服务器而不是从浏览器缓存中获取文件?
换句话说,使用fetch()
可以绕过浏览器的缓存吗?
使用fetch('somefile.json')
,可以请求从服务器而不是从浏览器缓存中获取文件?
换句话说,使用fetch()
可以绕过浏览器的缓存吗?
Answers:
提取可以获取一个包含许多自定义设置的初始化对象,您可能希望将该自定义设置应用于该请求,其中包括一个称为“标头”的选项。
“标题”选项采用一个标题对象。该对象允许您配置要添加到请求中的标头。
通过在标题中添加pragma:no-cache和cache-control:no-cache,您将强制浏览器检查服务器,以查看文件是否与缓存中已有的文件不同。您还可以使用cache-control:no-store,因为它只是不允许浏览器和所有中间缓存来存储返回响应的任何版本。
这是一个示例代码:
var myImage = document.querySelector('img');
var myHeaders = new Headers();
myHeaders.append('pragma', 'no-cache');
myHeaders.append('cache-control', 'no-cache');
var myInit = {
method: 'GET',
headers: myHeaders,
};
var myRequest = new Request('myImage.jpg');
fetch(myRequest, myInit)
.then(function(response) {
return response.blob();
})
.then(function(response) {
var objectURL = URL.createObjectURL(response);
myImage.src = objectURL;
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ES6</title>
</head>
<body>
<img src="">
</body>
</html>
希望这可以帮助。
new Request
和传递一些参数到cache
选项呢?我正在尝试使用它,但是它不起作用。
更容易使用缓存模式:
// Download a resource with cache busting, to bypass the cache
// completely.
fetch("some.json", {cache: "no-store"})
.then(function(response) { /* consume the response */ });
// Download a resource with cache busting, but update the HTTP
// cache with the downloaded resource.
fetch("some.json", {cache: "reload"})
.then(function(response) { /* consume the response */ });
// Download a resource with cache busting when dealing with a
// properly configured server that will send the correct ETag
// and Date headers and properly handle If-Modified-Since and
// If-None-Match request headers, therefore we can rely on the
// validation to guarantee a fresh response.
fetch("some.json", {cache: "no-cache"})
.then(function(response) { /* consume the response */ });
// Download a resource with economics in mind! Prefer a cached
// albeit stale response to conserve as much bandwidth as possible.
fetch("some.json", {cache: "force-cache"})
.then(function(response) { /* consume the response */ });
参考:https : //hacks.mozilla.org/2016/03/referrer-and-cache-control-apis-for-fetch/
pragma: no-cache
这些解决方案似乎都不适合我,但是这种相对干净的(AFAICT)黑客确实有效(改编自/webmasters/93594/prevent-browser-from-caching-text-file) :
const URL = "http://example.com";
const ms = Date.now();
const data = await fetch(URL+"?dummy="+ms)
.catch(er => game_log(er.message))
.then(response => response.text());
这只是添加一个虚拟参数,该参数在每次查询调用时都会更改。无论如何,如果其他解决方案似乎可行,我建议使用这些解决方案,但在我的测试中,它们不适用于我的情况(例如,使用Cache-Control
and的解决方案pragram
)。