Chrome v72, похоже, игнорирует заголовки Cache-Control и кеширует service-worker.js Для проверки я установил все ресурсы для использования:
res.set('Cache-Control', 'no-store, no-cache, must-revalidate, private');
res.set('Max-Age', '0');
При переходе на localhost: 4000 / dist / service-worker.js я могу убедиться, что он установлен правильно:
HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: no-store, no-cache, must-revalidate, private
Max-Age: 0
Access-Control-Allow-Origin: *
Accept-Ranges: bytes
Last-Modified: Thu, 14 Feb 2019 23:17:55 GMT
ETag: W/"3c1-168ee4d6297"
Content-Type: application/javascript; charset=UTF-8
Content-Length: 961
Vary: Accept-Encoding
Date: Thu, 14 Feb 2019 23:27:24 GMT
Connection: keep-alive
Даже при этом, начиная с Chrome 68, он «должен» обходить HTTP-кеш по умолчанию: https://developers.google.com/web/updates/2018/06/fresher-sw
Это явно не так.
У меня установлен флажок обновлять при перезагрузке на вкладке "Приложения". Я закрыл Chrome и снова открыл его, но он все еще использует старый service-worker.js из кеша.
Конфигурация моей рабочей панели выглядит так:
new GenerateSW({
include: [/\.css$/, /\.js$/],
clientsClaim: true,
skipWaiting: true
}),
Я также могу проверить, кэширует ли Chrome service-worker.js, потому что если я:
Откройте новую вкладку и перейдите к: http://localhost:4000/dist/service-worker.js
Chrome фактически получает ПОСЛЕДНИЕ, и теперь другая вкладка запускает событие «install».
- Другая вкладка теперь содержит последнюю версию сервис-воркера.
Предпоследний тест:
- Зарегистрируйте service-worker.js
- Внесите изменения, переименуйте service-worker.js в sw.js (зарегистрируйте sw.js)
- Перейдите к http://localhost:4000 и убедитесь, что он все еще использует кешированный service-worker.js
- Перейдите к http://localhost:4000/dist/service-worker.js - > 404 Так что, хотя он больше не существует, он использует кешированную версию.
Финальный тест:
navigator.serviceWorker.register(`/dist/service-worker.js?hack=${Math.random()}`)
Конечно, теперь он принимает все новые обновления service-worker.js.
Это ошибка Chrome? Я что-то неправильно настраиваю? То же самое происходит в Chrome Canary.
В качестве альтернативы я могу сделать следующее, чтобы обойти кеш:
navigator.serviceWorker
.register(`/dist/sw.js`)
.then(registration => {
registration.update();
})
Но это похоже на взлом ....