UPD 22.02.2019 https://bugs.chromium.org/p/chromium/issues/detail?id=934386
Я активно тестирую своего работника службы кэширования и иногда получаю ошибку net::ERR_CONNECTION_RESET 200 (OK)
для файлов js / css, которые обслуживаются службойworker.
Я использую workbox 3.6.3
Шаги для воспроизведения:
- остановка сервисного работника
- удаление всех кэшей
- перезагрузка первой страницы - моя веб-страница загружена и сервисный работник установлен
- перезагрузка второй страницы - иногда я получаю ошибку , которая выглядит следующим образом
GET https://dev-host.com/client/build/_/12.js net::ERR_CONNECTION_RESET 200 (OK)
Что происходит в браузере:
- мой скрипт загружается через тег
script
, который создается и вставляется в тег head
веб-страницы.Все это выполняется функцией requireEnsure
из скрипта manifest.js, сгенерированного веб-пакетом - https://gist.github.com/chestozo/acd651382f9590988d4679f8dbb21d19. - , поскольку я вижу, что запрос скрипта перехватывается рабочим, который выполняет выборку скрипта и сохраняет его в кеше
- тогда я вижу, что первоначальный запрос занимает некоторое время, а затем происходит сбой
- первый запрос, инициированный
script
тег вставляется во второй запрос head
- - выполняется сервисным работником;это успешно
Здесь вы можете видеть, что запрос файла перехватывается рабочей коробкой:
И, наконец, этот первоначальный запростерпит неудачу:
Вот как выглядит мой скрипт работника службы sw.js
:
workbox.skipWaiting();
workbox.clientsClaim();
workbox.routing.registerRoute(
new RegExp(reRuntimeStatic),
workbox.strategies.cacheFirst({
cacheName: CACHE_NAMES.STATIC,
plugins: [
new workbox.cacheableResponse.Plugin({
statuses: [ 200 ]
}),
new workbox.expiration.Plugin({
maxAgeSeconds: 5 * 60 * 60 * 24,
maxEntries: 100
})
]
}),
'GET'
);
self.__precacheManifest = [].concat(cacheConfig.precache || []);
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
Есть идеи, что здесь происходит?