Кэширование HTTP-ответов
Сервис $http
поддерживает кэширование ответов на HTTP-запросы.
Если один и тот же запрос в течение некоторого времени выполняется несколько раз, $http
может брать ответ из кэша вместо того, чтобы выполнять запрос повторно.
Условия кэширования
Кэширование работает, если соблюдены следующие условия:
- До выполнения HTTP-запроса в сценарии вызывается метод
$http.config
с полемcacheTimeToLiveInSeconds
. - Метод
$http.query
вызывается с параметромcachingRequired
со значениемtrue
. - Запрос является успешным — имеет код ответа от 200 до 299. Ответы на запросы с ошибкой не кэшируются.
- Повторные запросы имеют одинаковые значения полей
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
});