Мой браузер продолжает отображать кэшированную страницу, несмотря на отправку сервером no-cache, no-store, must-revalidate в заголовке ответа

Мой браузер продолжает отображать кэшированную страницу, несмотря на отправку сервером no-cache, no-store, must-revalidate в заголовке ответа

Контент на наших страницах постоянно меняется, и поэтому мы не хотим, чтобы браузер кэшировал страницу или показывал кэшированную страницу или наших пользователей. Но браузер продолжает показывать кэшированную страницу, несмотря на отправку no-cache, no-store, must-revalidate с сервера в заголовке ответа. Это действительно раздражает. У нас тысячи пользователей, и все они читают старые новости!!!

Мы используем клиентский шаблон js (handlebars js) для считывания данных с сервера и рендеринга страницы, но браузер продолжает показывать пользователям последнюю отрисованную страницу, а handlebars не считывает новые данные с сервера и не обновляет контент. Что может быть не так?

Если я нажимаю Shift-Reload, то браузер отображает новый контент, но я не могу просить или ожидать, что мои пользователи будут делать это каждый раз при загрузке нашей страницы.

Может ли кто-нибудь дать полезные советы?

200 ОК

Заголовок ответа:

Accept-Ranges: bytes
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 12229
Content-Type: text/html
Date: Fri, 14 Aug 2020 09:08:10 GMT
ETag: "1e9602c3ddcf81c338fa4194c61ea035"
Last-Modified: Fri, 07 Aug 2020 12:38:22 GMT
Server: nginx/1.19.1
Strict-Transport-Security: max-age=0; includeSubDomains
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-request-id: tx00000000000004b9d2b06-005f36547a-ab8956-ams3b
x-rgw-object-type: Normal

Заголовки запроса:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: _ga=GA1.1.709310680.1596978913; _gid=GA1.1.2045080055.1596978913
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
(index):48 [Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write

Мы делаем http GET, так как перед nginx будет cloudflare, который выполнит завершение tls и сделает обычный http get для нашего nginx. Я боюсь представить, какие еще проблемы с кэшированием возникнут из-за кэширования cloudflare, когда мы запустим cloudflare. Нам нужно запуститься через пару дней, и нам нужно решить эту проблему, прежде чем мы запустим эту версию в производство. Буду признателен за быструю помощь в решении вышеуказанной проблемы. Заранее спасибо.

решение1

Вы использовалиДирективы управления кэшемкоторые конфликтуют друг с другом, поэтому браузер должен принять решение, каким директивам подчиняться, а какие игнорировать.

В частности, вы использовали:

  • no-cache. Это фактически позволяет кэшировать ответ, хотя он сразу же помечается как устаревший и всегда повторно проверяется на исходном сервере.
  • must-revalidate: Означает только, что устаревший кэшированный документ должен быть повторно проверен исходным сервером. Подразумевается, что no-cacheso не имеет здесь дополнительного эффекта.
  • no-store: Не кэшировать ответ.

Что делает браузер, когда вы сказали не кэшировать его, хотя кэшировать его можно?

Если вы не хотите, чтобы ответ кэшировался, используйтетолько no-store. Не используйте две другие директивы Cache-Control.

Связанный контент