avec fetch('somefile.json')
, il est possible de demander que le fichier soit extrait du serveur et non du cache du navigateur?
autrement dit, avec fetch()
, est-il possible de contourner le cache du navigateur?
Fetch peut prendre un objet init contenant de nombreux paramètres personnalisés que vous voudrez peut-être appliquer à la demande. Cela inclut une option appelée "en-têtes".
L'option "en-têtes" prend un objet En-tête . Cet objet vous permet de configurer les en-têtes que vous souhaitez ajouter à votre demande.
En ajoutant pragma: no-cache et un cache-control: no-cache à votre en-tête, vous obligerez le navigateur à vérifier sur le serveur si le fichier est différent du fichier qu’il a déjà dans le cache. Vous pouvez également utiliser cache-control: no-store , car il empêche simplement le navigateur et tous les caches intermédiaires de stocker toute version de la réponse renvoyée.
Voici un exemple de code:
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>
J'espère que cela t'aides.
Utilisation plus facile des modes de 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 */ });
reference: https://hacks.mozilla.org/2016/03/referrer-and-cache-control-apis-for-fetch/
Vous pouvez définir 'Cache-Control': 'no-cache'
dans l'en-tête comme ceci ::
return fetch(url, {
headers: {
'Cache-Control': 'no-cache'
}
}).then(function (res) {
return res.json();
}).catch(function(error) {
console.warn('Failed: ', error);
});