
Контент на наших страницах постоянно меняется, и поэтому мы не хотим, чтобы браузер кэшировал страницу или показывал кэшированную страницу или наших пользователей. Но браузер продолжает показывать кэшированную страницу, несмотря на отправку 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-cache
so не имеет здесь дополнительного эффекта.no-store
: Не кэшировать ответ.
Что делает браузер, когда вы сказали не кэшировать его, хотя кэшировать его можно?
Если вы не хотите, чтобы ответ кэшировался, используйтетолько no-store
. Не используйте две другие директивы Cache-Control.