Назад | Перейти на главную страницу

Мой браузер продолжает показывать кешированную страницу, несмотря на отправку без кеширования, без хранения, обязательной повторной проверки с сервера в заголовке ответа

Контент на наших страницах постоянно меняется, и, следовательно, мы не хотим, чтобы браузер кэшировал страницу или отображал кешированные страницы или наших пользователей. Но браузер продолжает показывать кешированную страницу, несмотря на отправку с сервера в заголовке ответа 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 будет облачная вспышка, которая выполнит завершение tls и выполнит нормальный HTTP-доступ к нашему nginx. Я боюсь представить, какие еще проблемы с кешированием возникнут при кэшировании облачной вспышки, когда мы начнем работать с облачной вспышкой. Нам нужно запустить его через пару дней и решить эту проблему, прежде чем мы начнем производство с этой версией. Будем признательны за быструю помощь в этом отношении для решения вышеуказанной проблемы. Заранее спасибо.

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

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

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

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

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