Принудительная перезагрузка браузеров после установки заголовков кэша для домашней страницы

#http-headers #browser-cache

#http-заголовки #браузер-кэш

Вопрос:

У меня есть SPA, и случайно при запуске я устанавливаю заголовки кэша не только для ресурсов, но и для главной страницы домена (напримерwww.mysite.com ).

Мои ресурсы JS и CSS имеют версию, и они правильно получают уникальное имя файла при сборке для удаления кэшей, но проблема в том, что, поскольку моя домашняя страница тоже кэшируется в браузере, посетитель никогда не получает обновленный HTML. Они просто всегда получают старый HTML, запрашивающий старые ресурсы.

Теперь я исправил заголовки, но все пользователи, которые посещали мой сайт ранее, получают старую версию, даже когда они нажимают «перезагрузить» в браузере. Мне удалось принудительно выполнить это, когда я открываю DevTools и нажимаю «Очистить кэш и выполнить жесткую перезагрузку», но это не то, что обычно делают мои пользователи. Итак, вопрос в том, есть ли у меня возможность заставить браузеры перезагрузить главную страницу в домене после того, как заголовки кэша были установлены один раз?

Ниже приведены заголовки, которые получают старые посетители. Я бы предположил, что max-age = 86400 заставляет их перезагружать страницу на следующий день, но, очевидно, это не так, поскольку даже люди, которые посетили меня неделю назад, все еще получают старую версию.

 access-control-allow-origin: *
cache-control: public, max-age=86400
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Fri, 21 Aug 2020 09:43:58 GMT
etag: W/"95e-173e97039b2"
last-modified: Thu, 13 Aug 2020 20:08:32 GMT
server: nginx/1.17.3
status: 200
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: Express
x-xss-protection: 1; mode=block
  

Большое спасибо за любой совет.

Ответ №1:

Итак, в конце концов, мне удалось исправить это, добавив измененный заголовок etag. Похоже, что переключение cache-control на no-store и удаление etag в целом не помогло, но наличие cache-control: no-store и etag с другим значением заставило тестовый браузер Chrome перезагрузиться.