Версионирование ассетов и кэш-заголовки: как кэшировать навсегда и всё равно обновлять
Приём называется cache busting через хеш в имени файла: содержимое файла определяет его имя (app.9f2c1a.js), поэтому один и тот же URL всегда отдаёт одно и то же содержимое и его можно кэшировать на год с Cache-Control: public, max-age=31536000, immutable. Обновление происходит не инвалидацией кэша, а появлением нового имени: изменился код — изменился хеш — браузер запрашивает новый файл. Ключевое условие работы схемы: HTML кэшировать так нельзя, потому что именно он ссылается на хешированные файлы; его отдают с коротким сроком или вовсе без кэша, обычно no-cache с валидацией по ETag. Отдельная тонкость — стабильность хешей: если сборщик меняет хеши всех файлов при изменении одного модуля, кэш пользователей обнуляется на каждом деплое; за это отвечают детерминированные идентификаторы модулей и выделение runtime-чанка.