fetch(),如何发出非缓存请求?

2022-08-30 04:53:22

与 ,是否可以请求从服务器而不是从浏览器缓存中获取文件?fetch('somefile.json')

换句话说,使用 ,是否有可能绕过浏览器的缓存?fetch()


答案 1

Fetch可以采用一个init对象,其中包含许多您可能希望应用于请求的自定义设置,其中包括一个名为“headers”的选项。

“标头”选项采用标头对象。此对象允许您配置要添加到请求中的标头。

通过在标头中添加编译指示:无缓存缓存控件:无缓存,您将强制浏览器检查服务器,以查看该文件是否与缓存中已有的文件不同。您还可以使用缓存控制: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>

希望这有帮助。


答案 2

更易于使用缓存模式:

  // 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/