Перейти к основному содержимому

Кэширование HTTP-ответов

Сервис $http поддерживает кэширование ответов на HTTP-запросы. Если один и тот же запрос в течение некоторого времени выполняется несколько раз, $http может брать ответ из кэша вместо того, чтобы выполнять запрос повторно.

Условия кэширования

Кэширование работает, если соблюдены следующие условия:

  1. До выполнения HTTP-запроса в сценарии вызывается метод $http.config с полем cacheTimeToLiveInSeconds.
  2. Метод $http.query вызывается с параметром cachingRequired со значением true.
  3. Запрос является успешным — имеет код ответа от 200 до 299. Ответы на запросы с ошибкой не кэшируются.
  4. Повторные запросы имеют одинаковые значения полей method, url, headers, query, body, form и dataType.
подсказка

Если все условия выполнены, ответ на первый запрос будет сохранен в кэше. Последующие одинаковые запросы в течение cacheTimeToLiveInSeconds будут возвращать ответ из кэша.

Пример использования

Следующий пример иллюстрирует, что при сравнении объектов body и form учитывается их структура, а не форма записи. Здесь ответ на первый запрос будет получен от сервера, а на второй — взят из кэша.

init:
$http.config({
cacheTimeToLiveInSeconds: 10
});

theme: /

state: 1
q!: 1
script:
var body = {
key1: "value1",
key2: "value2",
foo: { foo: "bar", baz: "qux" },
c: null,
b: [3, 1, 2]
};

$http.query("https://httpbin.org/anything", {
method: "POST",
body: body,
cachingRequired: true
});

state: 2
q!: 2
script:
var body = {
b: [3, 1, 2],
key2: "value2",
key1: "value1",
foo: {
baz: "qux",
f: function () {}, // Функция не сериализуется и не отправляется в запросе.
foo: "bar"
},
c: null
};

$http.query("https://httpbin.org/anything", {
method: "POST",
body: body,
cachingRequired: true
});