SagePtr
@SagePtr
Еда - это святое

Правильно ли я использую заголовок Cache-Control?

Схема кеширования следующая: определённый ресурс должен по желанию браузера кешироваться, но при этом при каждом новом открытии страницы он должен ревалидироваться на сервере и получать заголовок 200 или 304 (в зависимости от наличия в кэше). Также каждые 10 минут он на фоне дёргается через XMLHttpRequest и обновляется на странице, дабы избежать открытых чёрт знает когда открытых вкладок.
Достаточно ли для этих целей простого заголовка:
Cache-Control: no-cache ?
Не нужно дополнительно добавлять туда через запятую директивы вроде max-age или must-revalidate?
Как гласит документация:
no-cache
The response may be stored by any cache, even if the response is normally non-cacheable. However, the stored response MUST always go through validation with the origin server first before using it, therefore, you cannot use no-cache in-conjunction with immutable. If you mean to not store the response in any cache, use no-store instead. This directive is not effective in preventing caches from storing your response.

Беглая проверка в основных браузерах (Chrome, Firefox и IE11) показала, что только лишь no-cache без must-revalidate указать достаточно (при условии, что до этого ресурс нигде не светился с другими заголовками кеширования и не засветился в кэшах), но есть ли какие-то нюансы или подводные камни, при которых эта схема может дать сбой? (при условии, что у ресурса есть Last-Modified и ETag, которые корректно меняются при каждом изменении ресурса на стороне сервера). Поддержкой браузеров старше 5 лет можно пренебречь.

UPD:
Если сервер находится за Cloudflare, то в этом случае срабатывает кэш Cloudflare, у которого своя политика кэширования (по крайней мере, на бесплатных аккаунтах). В таких случаях для его обхода можно использовать:
Cache-Control: private, no-cache
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы