Ответ
HTTP-кэширование — это механизм для временного хранения копий ресурсов (HTML-страниц, CSS, JavaScript, изображений) на стороне клиента (браузер) или промежуточных прокси-серверов. Его цель — значительно ускорить повторные загрузки страниц и снизить нагрузку на origin-сервер.
Основные компоненты и заголовки:
-
Cache-Control— главный заголовок для управления кэшем. Указывает директивы:max-age=<seconds>— максимальное время хранения ресурса в кэше.public/private—publicразрешает кэширование на прокси,private— только в браузере пользователя.no-cache— перед использованием кэшированную версию необходимо проверить на актуальность у сервера.no-store— полностью запрещает кэширование.
-
Валидаторы (для проверки свежести):
ETag(Entity Tag): Уникальный хэш-идентификатор версии ресурса. Клиент отправляет его в заголовкеIf-None-Match.Last-Modified: Дата последнего изменения. Клиент отправляет её в заголовкеIf-Modified-Since.
Типичный жизненный цикл запроса с кэшем:
-
Первый запрос: Браузер загружает ресурс. Сервер отвечает с заголовками, например:
HTTP/1.1 200 OK Cache-Control: public, max-age=3600 ETag: "abc123" Last-Modified: Mon, 01 Jan 2024 12:00:00 GMTБраузер сохраняет ресурс и эти заголовки в своём кэше.
-
Повторный запрос (через 30 минут): Браузер видит, что
max-age=3600(1 час) не истёк, и загружает ресурс напрямую из кэша, без сетевого запроса. -
Повторный запрос (через 2 часа):
max-ageистёк. Браузер отправляет условный запрос с валидаторами:GET /style.css HTTP/1.1 Host: example.com If-None-Match: "abc123" If-Modified-Since: Mon, 01 Jan 2024 12:00:00 GMT- Если ресурс не изменился, сервер отвечает статусом
304 Not Modified(без тела ответа). Браузер использует кэшированную версию. - Если ресурс изменился, сервер отвечает
200 OKс новым содержимым и обновлёнными заголовками кэша.
- Если ресурс не изменился, сервер отвечает статусом
Практическая польза: Правильная настройка кэширования статических ресурсов (CSS, JS, изображения) — один из ключевых факторов высокой производительности веб-сайта.