Открыть сервис

Кэш страниц

Кэш страниц — это механизм временного хранения копий веб-страниц (HTML-документов, CSS-стилей, JavaScript-скриптов, изображений и других статических ресурсов) на стороне клиента (браузера пользователя) или на промежуточных серверах (прокси-серверы, CDN). Основная цель кэширования — ускорение загрузки веб-страниц при повторных обращениях, снижение нагрузки на сервер-источник и уменьшение потребления интернет-трафика.

Принцип работы

Кэширование страниц основано на сохранении локальной копии ответа сервера на определённый HTTP-запрос. При первом посещении страницы браузер или промежуточный сервер загружает все необходимые ресурсы с исходного сервера. Сервер в ответе HTTP может передать заголовки, управляющие кэшированием, которые указывают, можно ли сохранять копию, на какой срок и при каких условиях её можно использовать.

При повторном запросе той же страницы система проверяет наличие актуальной копии в кэше. Если копия есть и не устарела, она используется без обращения к серверу. Если копия устарела или помечена как недействительная, браузер может выполнить условный запрос (с заголовками If-Modified-Since или If-None-Match), и сервер либо вернёт обновлённую версию, либо подтвердит, что старая копия ещё актуальна (код ответа 304 Not Modified).

Типы кэширования

Кэширование на стороне клиента (браузерное кэширование)

Браузер пользователя сохраняет копии посещённых страниц и их ресурсов в локальном хранилище (обычно на жёстком диске или в оперативной памяти). Управляется с помощью HTTP-заголовков Cache-Control, Expires, Last-Modified, ETag. Позволяет мгновенно загружать страницы при повторных визитах, если кэш не очищен.

Кэширование на промежуточных серверах (прокси-кэширование)

Прокси-серверы (например, Squid, Varnish) или сети доставки контента (CDN) хранят копии страниц для множества пользователей. Если один пользователь запросил страницу, её копия сохраняется на прокси-сервере, и при запросе от другого пользователя она отдаётся из кэша, не нагружая исходный сервер. Это особенно эффективно для популярных сайтов.

Кэширование на стороне сервера (серверное кэширование)

Сервер приложения может генерировать HTML-страницу один раз и сохранять её в памяти (например, с помощью Memcached, Redis) или в файловой системе. При последующих запросах готовая страница отдаётся из кэша, минуя ресурсоёмкие операции генерации (запросы к базе данных, вычисления). Используется в системах управления контентом (CMS) и фреймворках (WordPress, Django, Laravel).

Управление кэшированием

Управление кэшированием осуществляется через HTTP-заголовки ответа сервера. Основные из них:

  • Cache-Control — главный заголовок, задающий директивы кэширования. Значения: public (кэшировать можно всем), private (только браузеру пользователя), no-cache (не использовать без проверки), no-store (не кэшировать вообще), max-age=<секунды> (время жизни кэша).
  • Expires — устаревший заголовок, указывающий конкретную дату и время, до которого копия считается актуальной.
  • Last-Modified — дата последнего изменения ресурса. Используется для условных запросов.
  • ETagуникальный идентификатор версии ресурса (обычно хеш содержимого). Позволяет проверять, изменился ли ресурс.

Проблемы и ограничения

Неактуальность данных (stale content)

Если кэш хранится слишком долго, пользователь может видеть устаревшую версию страницы. Для динамических страниц (например, новостные ленты, корзина интернет-магазина) кэширование может быть нежелательным или требует точной настройки.

Очистка кэша

При изменении контента на сервере необходимо принудительно инвалидировать (очистить) кэш на всех уровнях. Это может быть сложно, особенно при использовании CDN и прокси-серверов.

Конфиденциальность

Персональные данные, отображаемые на странице (например, имя пользователя, баланс счёта), не должны кэшироваться на общедоступных прокси-серверах. Для этого используется директива private в Cache-Control.

Размер кэша

Локальное хранилище браузера имеет ограниченный объём (обычно несколько десятков мегабайт). При переполнении старые записи удаляются по алгоритму LRU (Least Recently Used).

Применение

Кэширование страниц широко применяется в веб-разработке для оптимизации производительности. Оно является основой работы:

  • Статических сайтов — HTML-страницы могут быть полностью закэшированы на длительный срок.
  • Сайтов с динамическим контентом — кэшируются только общие части (шапка, подвал, меню), а уникальные блоки генерируются динамически.
  • API — ответы на повторяющиеся запросы (например, список товаров) могут кэшироваться на стороне клиента или на прокси-сервере.
  • Мобильных приложенийкэширование веб-контента для работы в офлайн-режиме.

Интересные факты

  • Первые версии HTTP (0.9 и 1.0) не имели механизмов управления кэшированием. Заголовки Cache-Control и Expires появились в HTTP/1.1 (1997 год).
  • Современные браузеры (Google Chrome, Mozilla Firefox, Safari) используют несколько уровней кэша: в оперативной памяти (memory cache) и на диске (disk cache). Memory cache быстрее, но очищается при закрытии браузера.
  • Для принудительного обновления страницы пользователи могут использовать сочетание клавиш Ctrl+F5 (в Windows) или Cmd+Shift+R (в macOS), что заставляет браузер игнорировать кэш и загружать все ресурсы заново.
  • Кэширование страниц — один из ключевых факторов, влияющих на показатель Core Web Vitals (в частности, Largest Contentful Paint и First Contentful Paint), используемый поисковой системой Google для ранжирования сайтов.

Источники

  • RFC 7234 — Hypertext Transfer Protocol (HTTP/1.1): Caching (2014)
  • Документация MDN Web Docs: HTTP caching
  • «High Performance Browser Networking» — Ilya Grigorik (O'Reilly Media, 2013)
  • «Web Performance Tuning» — Patrick Killelea (O'Reilly Media, 2002)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →