Cache.match()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
Экспериментальная возможность: Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
Метод match()
интерфейса Cache
возвращает Promise
, который разрешается в Response
, ассоциированный с первым совпадающим запросом в объекте Cache
. Если совпадений не найдено, Promise
разрешается в undefined
.
Синтаксис
cache.match(request, { options }).then(function (response) {
//сделать что-нибудь с ответом
});
Возвращаемое значение
Promise
, который разрешается в первый Response
, который совпадает с запросом или в undefined
, если совпадений не найдено.
Примечание: Cache.match()
в основном идентичен Cache.matchAll()
, за исключением того, что Cache.match()
разрешается в response[0]
(первый совпадающий ответ) вместо response[]
(массив со всеми совпадающими ответами).
Параметры
- request
- options Необязательный
-
Объект, который задаёт параметры для операции
match
. Допустимые значения:ignoreSearch
: Булево значениеBoolean
, которое указывает следует ли игнорировать строку запроса в url. Например, если оно установлено вtrue, часть
?value=bar
запросаhttp://foo.com/?value=bar
будет проигнорирована при поиске соответствий ключа. По умолчанию равноfalse
.ignoreMethod
: Булево значениеBoolean
, которое, когда равноtrue
, предотвращает проверкуhttp
метода для запросаRequest
при выполнении сопоставлений ключа (обычно разрешены лишьGET
иHEAD
). По умолчанию равноfalse
.ignoreVary
: Булево значениеBoolean
, которое, когда установлено вtrue,
указывает операции сопоставления ключа не проводить проверку соответствия заголовкаVARY
— т.е., если URL совпадает, вы получите соответствие независимо от того, установлен ли на объектеResponse
заголовокVARY
. По умолчанию равноfalse
.cacheName
: СтрокаDOMString
, задающая определённый кеш для поиска. Заметьте, что этот параметр игнорируется методомCache.match()
.
В Chrome поддерживается лишь
cacheName
.
Примеры
Код взят примера из примера пользовательская офлайн-страница (живой пример).
Следующий пример использует кеш для предоставления данных, когда запрос не удался. Выражение catch()
выполняется когда вызов fetch()
возбуждает исключение. Внутри выражения catch()
, match()
используется для возврата корректного ответа.
В этом примере, мы решили что кешироваться будут лишь HTML-документы полученные с помощью GET-запроса. Если условие if()
равно false, то обработчик не будет вмешиваться в ответ. Если зарегистрированы другие обработчики получения данных, то у них будет шанс вызвать event.respondWith()
. Если ни один из обработчиков не вызовет event.respondWith()
, запрос будет обработан браузером, как это было бы сделано без участия сервис воркера. Если fetch()
возвращает валидный HTTP ответ к кодом из диапазона 4xx или 5xx, то метод catch()
не будет вызван.
self.addEventListener("fetch", function (event) {
// Мы хотим выполнить лишь event.respondWith() если это GET-запрос HTML-документа.
if (
event.request.method === "GET" &&
event.request.headers.get("accept").indexOf("text/html") !== -1
) {
console.log("Handling fetch event for", event.request.url);
event.respondWith(
fetch(event.request).catch(function (e) {
console.error("Fetch failed; returning offline page instead.", e);
return caches.open(OFFLINE_CACHE).then(function (cache) {
return cache.match(OFFLINE_URL);
});
}),
);
}
});
Спецификации
Specification |
---|
Service Workers # cache-match |
Совместимость с браузерами
BCD tables only load in the browser