RangeRequestsPlugin — это плагин библиотеки Workbox,
предназначенный для обработки HTTP-запросов с заголовком
Range. Он позволяет эффективно отдавать клиенту только
часть ресурса, что особенно актуально для потокового воспроизведения
мультимедиа, таких как аудио- и видеофайлы, а также больших бинарных
данных.
HTTP-заголовок Range используется для указания диапазона
байтов, которые клиент хочет получить от сервера. Например:
Range: bytes=0-1023
означает, что клиент запрашивает первые 1024 байта ресурса.
Workbox, с помощью RangeRequestsPlugin, позволяет перехватывать такие запросы на уровне Service Worker и управлять отдачей частичных данных из кэша или с сервера. Это повышает скорость загрузки и экономит трафик, так как не требуется повторно загружать весь файл при воспроизведении медиаконтента.
Для использования RangeRequestsPlugin необходимо импортировать его из Workbox:
import { registerRoute } from 'workbox-routing';
import { CacheFirst } from 'workbox-strategies';
import { RangeRequestsPlugin } from 'workbox-range-requests';
Далее создается стратегия кэширования, в которую подключается плагин:
registerRoute(
({ request }) => request.destination === 'video',
new CacheFirst({
cacheName: 'video-cache',
plugins: [
new RangeRequestsPlugin(),
],
})
);
Ключевые моменты настройки:
video,
audio, image, font и др.).RangeRequestsPlugin перехватывает запросы с заголовком
Range и:
Пример логики работы при запросе диапазона:
Запрос: bytes=1000-1999
Кэш: bytes 0-999, 2000-2999
Результат: загрузка байтов с 1000 по 1999 с сервера, добавление их в кэш
GET запросов:
RangeRequestsPlugin работает исключительно с GET
запросами.gzip/brotli),
RangeRequestsPlugin может корректно работать только с несжатыми
ресурсами.Стриминг видео с кэшем:
registerRoute(
({ request }) => request.destination === 'video',
new CacheFirst({
cacheName: 'video-cache',
plugins: [
new RangeRequestsPlugin(),
],
})
);
Загрузка аудиофайлов по частям:
registerRoute(
({ request }) => request.destination === 'audio',
new CacheFirst({
cacheName: 'audio-cache',
plugins: [
new RangeRequestsPlugin(),
],
})
);
В обоих случаях RangeRequestsPlugin обеспечивает передачу только нужного диапазона, минимизируя задержки и снижая нагрузку на сеть.
RangeRequestsPlugin является мощным инструментом для оптимизации загрузки больших файлов, потокового медиаконтента и экономии сетевого трафика. Он интегрируется с существующими стратегиями Workbox и позволяет легко расширять функционал Service Worker для современных веб-приложений.