Плагин CacheableResponsePlugin предназначен для контроля
того, какие ответы должны попадать в кэш при работе с сервис-воркерами
через Workbox. Он обеспечивает фильтрацию кэшируемых ресурсов на основе
статуса ответа или заголовков ответа,
что особенно полезно для исключения ошибок, редиректов и нестандартных
ответов из кэша.
Плагин принимает объект конфигурации с двумя ключевыми параметрами:
statuses – массив чисел HTTP-статусов, которые
разрешены для кэширования. Пример: [0, 200]
0 используется для opaque-ответов (например,
кросс-доменные запросы без CORS).200 – стандартный успешный ответ.headers – объект с ключами-заголовками и массивом допустимых значений. Пример:
headers: {
'Content-Type': ['image/png', 'image/jpeg']
}
Позволяет кэшировать только те ответы, которые соответствуют конкретным заголовкам.
Плагин применяется в стратегии кэширования через
Workbox:
import { registerRoute } from 'workbox-routing';
import { CacheFirst } from 'workbox-strategies';
import { CacheableResponsePlugin } from 'workbox-cacheable-response';
registerRoute(
({ request }) => request.destination === 'image',
new CacheFirst({
cacheName: 'images-cache',
plugins: [
new CacheableResponsePlugin({
statuses: [0, 200],
headers: {
'Content-Type': ['image/png', 'image/jpeg']
}
})
]
})
);
В данном примере стратегия CacheFirst сначала пытается
отдать ресурс из кэша, а если его нет, загружает с сети. Плагин
CacheableResponsePlugin гарантирует, что в кэш попадут
только корректные ответы с статусом 0 или 200 и с
разрешёнными типами изображений.
statuses.Пример кэширования только успешных ответов:
new CacheableResponsePlugin({
statuses: [200]
});
NetworkFirst и StaleWhileRevalidateПлагин совместим с любыми стратегиями Workbox. Он полезен для контроля кэша на этапе записи:
import { StaleWhileRevalidate } from 'workbox-strategies';
registerRoute(
({ request }) => request.destination === 'script',
new StaleWhileRevalidate({
cacheName: 'js-cache',
plugins: [
new CacheableResponsePlugin({
statuses: [200]
})
]
})
);
CacheableResponsePlugin позволяет использовать строгие
правила по заголовкам. Например, можно кэшировать только
JSON-ответы:
new CacheableResponsePlugin({
headers: {
'Content-Type': ['application/json']
}
});
При этом любые ответы с другим Content-Type будут
автоматически игнорироваться и не попадут в кэш.
CacheableResponsePlugin часто используется совместно
с:
ExpirationPlugin – контроль времени жизни и
максимального количества элементов кэша.BroadcastUpdatePlugin – уведомление клиентов об
обновлении кэша.RangeRequestsPlugin – поддержка кэширования частичных
запросов (например, видео).Пример комбинированного использования:
import { ExpirationPlugin } from 'workbox-expiration';
new CacheFirst({
cacheName: 'videos-cache',
plugins: [
new CacheableResponsePlugin({ statuses: [200] }),
new ExpirationPlugin({
maxEntries: 20,
maxAgeSeconds: 7 * 24 * 60 * 60
})
]
});
CacheableResponsePlugin делает кэширование предсказуемым
и безопасным, исключая неожиданные ответы и обеспечивая соответствие
политики кэширования требованиям приложения.