CacheStorage.match()
====================

**Экспериментальная возможность:** **Это экспериментальная технология**  
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

Метод **`match()`** интерфейса `CacheStorage` (доступный через глобальное свойство `caches`) проверяет является ли данный `Request` или строка url ключом для какого-либо хранимого `Response`. Метод возвращает `Promise` если `Response` найден, или `undefined` если нет ни одного совпадения.

Объекты Cache проверяются в порядке создания.

**Примечание:** `caches.match()` это метод для удобства в работе. Такая функциональность достигается вызовом `cache.match()` для каждого объекта cache (в порядке полученном запросом `caches.keys()` (en-US)) пока `Response` не будет найден.

Синтаксис
---------
```

caches.match(request, options).then(function(response) {
  // Какие-либо действия с response
});
```

### Параметры

request

`Request` для поиска. Может быть объектом `Request` или строкой URL.

options Необязательный

Объект, свойства которого определяют, как проверяется совпадение в операции сопоставления. Доступны следующие варианты:

* `ignoreSearch`: `Boolean` (en-US) свойство. Определяет, следует ли игнорировать параметры запроса в строке url или нет. Например, если установлено `true`, параметры `?value=bar` запроса `http://foo.com/?value=bar` будут проигнорированы во время сопоставления. Значением по умолчанию является `false`.
* `ignoreMethod`: `Boolean` (en-US) свойство. Когда установлено `true`, предотвращает проверку `http` метода запроса `Request` (обычно разрешены только `GET` и `HEAD`.) По умолчанию установлено `false`.
* `ignoreVary`: `Boolean` (en-US) свойство, определяющее, следует ли выполнять проверку заголовка `VARY.` Если установлено `true`, совпадения будут найдены, независимо от того, имеет ли `Response` заголовок `VARY` или нет. По умолчанию установлено `false`.
* `cacheName`: Строка `DOMString` - имя кеша для поиска.

### Возвращаемое значение

Метод возвращает `Promise` который разрешается совпавшим `Response`. Если ни одного совпадений не было найдено, promise разрешается с `undefined`.

Примеры
-------

Это пример из MDN sw-test example (см. sw-test running live). В данном примере, мы обрабатываем событие `FetchEvent`. Мы строим проверку ответа следующим образом:

1. Проверяем, совпадения для запроса в `CacheStorage` используя `CacheStorage.match()`. Если совпадение найдено, возвращаем response.
2. Если нет, открываем `v1` объект кеша, используя метод `open()`, добавляем изначальный запрос в кеш используя `Cache.put()` (en-US) и возвращаем клонированный объект запроса, используя `return response.clone()`. Это необходимо, потому что метод `put()` сохраняет в кеш тело запроса, изменяя, таким образом, изначальный запрос.
3. Если произошла какая-либо ошибка (например, из-за проблем с сетью), возвращаем резервный ответ.


```js
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 |
| --- |
| Service Workers # cache-storage-match |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Использование Service Workers (en-US)
* `Cache`
* `self.caches` (en-US)