Я использую HTTP 1.1
Cache-Control
заголовок для реализации кэширования на стороне клиента. Поскольку я обновляю свой сайт только раз в месяц, я бы хотел CSS
и JS
файлы будут кэшироваться на 30 дней с Cache-Control: max-age=2592000
. Проблема в том, что 30-дневный период, определяемый Cache-Control
не совпадает с циклом обновления веб-сайта, он начинается с момента, когда пользователи посещают сайт, и заканчивается через 30 дней, что означает, что обновление может произойти тем временем, и пользователи какое-то время будут работать с устаревшим контентом, что может нарушить отображение веб-сайта, если, например, HTML
и CSS
больше не совпадают.
Как я могу выполнять кэширование контента на стороне клиента в течение нескольких дней, но каким-то образом заставить пользователей обновлять свои CSS/JS
файлы после обновления сайта?
Одно из решений, которое я мог придумать, заключается в том, что если обновления веб-сайта можно запланировать, max-age
возвращаемый сервером может быть уменьшен каждый день соответственно, так что независимо от того, когда люди посещают веб-сайт, конец периода кеширования совпадет с обновлением веб-сайта, но изменение конфигурации сервера каждый день противоречит одному из моих принципов системного администратора (один раз он работает, не трогайте его).
Добавить отпечатки пальцев / хэши ваши URL-адреса CSS и JS и установите заголовки Expires / Cache-Control в далеком будущем.
Это тоже техника, которую Rails Asset Pipeline использует.