The cache read-only property of the Request interface contains the cache mode of the request. It controls how the request will interact with the browser's HTTP cache.
var currentCacheMode = request.cache;
A RequestCache value. The available values are:
default — The browser looks for a matching request in its HTTP cache. no-store — The browser fetches the resource from the remote server without first looking in the cache, and will not update the cache with the downloaded resource.reload — The browser fetches the resource from the remote server without first looking in the cache, but then will update the cache with the downloaded resource.no-cache — The browser looks for a matching request in its HTTP cache. force-cache — The browser looks for a matching request in its HTTP cache. only-if-cached — The browser looks for a matching request in its HTTP cache. "only-if-cached" mode can only be used if the request's mode is "same-origin". Cached redirects will be followed if the request's redirect property is "follow" and the redirects do not violate the "same-origin" mode.// 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 */ });
// Naive stale-while-revalidate client-level implementation.
// Prefer a cached albeit stale response; but update if it's too old.
// AbortController and signal to allow better memory cleaning.
// In reality; this would be a function that takes a path and a
// reference to the controller since it would need to change the value
let controller = new AbortController();
fetch("some.json", {cache: "only-if-cached", mode: "same-origin", signal: controller.signal})
.catch(e => e instanceof TypeError && e.message === "Failed to fetch" ?
({status: 504}) : // Workaround for chrome; which simply fails with a typeerror
Promise.reject(e))
.then(res => {
if (res.status === 504) {
controller.abort()
controller = new AbortController();
return fetch("some.json", {cache: "force-cache", mode: "same-origin", signal: controller.signal})
}
const date = res.headers.get("date"), dt = date ? new Date(date).getTime() : 0
if (dt < (Date.now() - 86400000)) {
// if older than 24 hours
controller.abort()
controller = new AbortController();
return fetch("some.json", {cache: "reload", mode: "same-origin", signal: controller.signal})
}
// Other possible conditions
if (dt < (Date.now() - 300000)) // If it's older than 5 minutes
fetch("some.json", {cache: "no-cache", mode: "same-origin"}) // no cancellation or return value.
return res
})
.then(function(response) { /* consume the (possibly stale) response */ })
.catch(error => { /* Can be an AbortError/DOMError or a TypeError */ }); | Specification | Status | Comment |
|---|---|---|
| Fetch The definition of 'cache' in that specification. | Living Standard | Initial definition |
| Desktop | ||||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
| Basic support | No | Yes | 48 | No | No | 11 |
only-if-cached
|
No | ? | 50 | No | No | No |
| Mobile | |||||||
|---|---|---|---|---|---|---|---|
| Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
| Basic support | No | No | Yes | No | No | No | No |
only-if-cached
|
Yes | No | ? | No | No | No | No |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Request/cache