Как предотвратить кеширование резервного изображения навсегда в сафари с помощью рабочего окна - PullRequest
0 голосов
/ 15 апреля 2019

Я использую рабочую коробку (v4.1) для создания ServiceWorker, который обслуживает общее резервное изображение, если запрошенное изображение не может быть получено

Работает так, как предназначено для Google Chrome. Проблема заключается в том, что если изображение не может быть получено, вместо этого отображается мой ошибочный результат, Safari кэширует запасной вариант и не будет пытаться снова извлечь изображение при следующих запросах.

workbox.routing.registerRoute(
    /\.(?:png|jpg|jpeg|svg|gif|webp)$/,
    new workbox.strategies.StaleWhileRevalidate({
        cacheName: 'image-cache',
        plugins: [
            new workbox.expiration.Plugin({
                maxAgeSeconds: 7 * 24 * 60 * 60,
            })
        ],
    })
);

// Fallbacks
workbox.routing.setCatchHandler(({event}) => {
    switch (event.request.destination) {
        case 'image':
            fallbackImage = caches.match(workbox.precaching.getCacheKeyForURL('Images/fallback.svg'));
            return fallbackImage;
            break;

        case 'document':
            return  caches.match(workbox.precaching.getCacheKeyForURL('/Html/offline.html'));
            break;

        default:
            return Response.error();
    }
});

Как я могу убедиться, что запасной вариант не кэшируется в Safari, и при перезагрузке страницы отображается правильное изображение?

Я пытался изменить заголовок кеша на "no-store", когда запасной вариант обслуживается, но у меня не получилось? Есть ли способ поместить изображения (которые были заменены запасными) в их собственный кэш с очень коротким сроком действия?

Любая помощь будет очень ценится:)

1 Ответ

0 голосов
/ 01 мая 2019

Я бы порекомендовал настроить ваш веб-сервер для установки Cache-Control: no-cache в ответе, который он отправляет на /Images/fallback.svg. (Вероятно, это хорошая идея для любого URL, который вы обслуживаете, но не включает в свой URL-адрес.)

Это должно привести к повторной проверке Safari запасного ответа вместо использования его как есть при следующем запросе реального изображения.

...