This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The match()
method of the CacheStorage
interface (available globally as caches
) checks if a given Request
or url string is a key for a stored Response
. This method returns a Promise
for a Response
, or undefined
if no match is found.
Cache objects are searched in creation order.
caches.match()
is a convenience method. Equivalent functionality is to call cache.match()
on each cache (in the order returned by caches.keys()
) until a Response
is returned.caches.match(request, options).then(function(response) { // Do something with the response });
Request
you want to match. This can be a Request
object or a URL string.match
operation. The available options are: ignoreSearch
: A Boolean
that specifies whether the matching process should ignore the query string in the url. For example, if set to true
, the ?value=bar
part of http://foo.com/?value=bar
would be ignored when performing a match. It defaults to false
.ignoreMethod
: A Boolean
that, when set to true
, prevents matching operations from validating the Request
http
method (normally only GET
and HEAD
are allowed.) It defaults to false
.ignoreVary
: A Boolean
that, when set to true,
tells the matching operation not to perform VARY
header matching. In other words, if the URL matches you will get a match regardless of whether the Response
object has a VARY
header or not. It defaults to false
.cacheName
: A DOMString
that represents a specific cache to search within.a Promise
that resolves to the matching Response
. If no matching response to the specified request is found, the promise resolves with undefined
.
This example is from the MDN sw-test example (see sw-test running live). Here we wait for a FetchEvent
to fire. We construct a custom response like so:
CacheStorage
using CacheStorage.match()
. If so, serve that.v1
cache using open()
, put the default network request in the cache using Cache.put()
and return a clone of the default network request using return response.clone()
. The last is necessary because put()
consumes the response body.caches.match(event.request).then(function(response) { return response || fetch(event.request).then(function(r) { caches.open('v1').then(function(cache) { cache.put(event.request, r); }); return r.clone(); }); }).catch(function() { return caches.match('/sw-test/gallery/myLittleVader.jpg'); });
Specification | Status | Comment |
---|---|---|
Service Workers The definition of 'CacheStorage: match' in that specification. | Working Draft | Initial definition. |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 54
|
Yes | 44
|
No | 41
|
11.1 |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | 54
|
54
|
Yes | 44 | 41
|
Yes | ? |
© 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/CacheStorage/match