← Назад к вопросам

Что такое cookie и кэш? В чём разница?

1.2 Junior🔥 211 комментариев
#Клиент-серверная архитектура

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Cookie и кэш? Основные понятия

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

🍪 Cookie (HTTP Cookie, веб-куки)

Cookie — это небольшой фрагмент данных (обычно до 4 КБ), который сервер отправляет браузеру пользователя в заголовках HTTP-ответа. Браузер сохраняет эти данные и автоматически отправляет их обратно на сервер при каждом последующем запросе к тому же домену.

  • Цель и назначение:
    *   **Аутентификация и сессии:** Самый классический пример — сохранение идентификатора сессии (`session_id`), чтобы сервер "узнавал" пользователя между запросами.
    *   **Персонализация:** Сохранение предпочтений пользователя (тема сайта, язык, регион).
    *   **Трекинг:** Отслеживание поведения пользователя для аналитики (Google Analytics) и таргетированной рекламы.

  • Технические особенности:
    *   Хранятся в виде пар **ключ=значение**.
    *   Имеют атрибуты, управляющие их жизненным циклом: `Expires` или `Max-Age` (время жизни), `Domain` и `Path` (область действия), `Secure` (передача только по HTTPS), `HttpOnly` (защита от доступа через JavaScript для предотвращения XSS-атак).
    *   Отправляются на сервер в HTTP-заголовке `Cookie`.

  • Пример HTTP-заголовка с установкой куки:
    HTTP/1.1 200 OK
    Content-Type: text/html
    Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2025 07:28:00 GMT; HttpOnly; Secure
    Set-Cookie: user_lang=ru; Max-Age=2592000
    

💾 Кэш (Cache)

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

  • Цель и назначение:
    *   **Повышение производительности:** Основная задача — мгновенная загрузка страницы при повторном посещении.
    *   **Сокращение трафика:** Загрузка одного и того же файла (например, логотипа, CSS, JS) происходит лишь один раз.
    *   **Снижение нагрузки на сервер:** Серверу не нужно повторно отдавать одни и те же статические файлы.

  • Что кэшируется:
    *   Изображения (`.jpg`, `.png`, `.svg`)
    *   Файлы стилей (`.css`)
    *   JavaScript-файлы (`.js`)
    *   Шрифты
    *   HTML-страницы (реже, с осторожностью)

  • Управление кэшем:
    Управление осуществляется через HTTP-заголовки, которые указывает сервер при отправке ресурса. Основные из них:
    *   `Cache-Control`: самый важный заголовок (например, `max-age=3600` — хранить в кэше 1 час).
    *   `ETag` и `Last-Modified`: используются для проверки актуальности кэшированной версии файла.

🔍 Ключевые различия между Cookie и кэшем

АспектCookieКэш
Основная цельСостояние и отслеживание сессии пользователя.Оптимизация производительности и скорости загрузки.
Тип хранимых данныхТекстовые строки (маленькие, структурированные).Бинарные файлы (изображения, скрипты, стили).
Куда отправляютсяАвтоматически прикладываются к каждому HTTP-запросу к соответствующему домену (в заголовках).Не отправляются на сервер автоматически. Браузер проверяет их актуальность, отправляя специальные условные запросы (с If-Modified-Since или If-None-Match).
РазмерОграничен (~4 КБ на один cookie, ~50-150 cookie на домен).Значительно больше (сотни мегабайт, зависит от настроек браузера и дискового пространства).
Срок храненияМогут быть сессионными (удаляются при закрытии вкладки) и постоянными (с заданным сроком жизни).Задается сервером (например, Cache-Control: max-age=86400) или настройками браузера.
Влияние на запросыУвеличивают объем передаваемых данных (каждый запрос "утяжеляется" заголовком Cookie).Сокращают количество и объем передаваемых данных, экономя трафик.
Ручное управлениеПользователь может просматривать и удалять в настройках браузера.Пользователь может очистить кэш целиком; выборочное управление затруднено.

🧪 Взгляд QA-инженера: на что обращать внимание при тестировании?

  1. Тестирование Cookie:
    *   **Корректность установки и отправки:** Проверка, что нужные куки устанавливаются после логина и отправляются в последующих запросах.
    *   **Срок жизни:** Проверка сессионных и постоянных кук.
    *   **Безопасность:** Проверка атрибутов `HttpOnly` и `Secure` для критичных кук (сессионных).
    *   **Влияние на функционал:** Что происходит при очистке кук? Что если куки отключены в браузере? Тестирование сценариев с истекшими куками.
    *   **Совместимость:** Хранение и отправка кук в разных браузерах и на мобильных устройствах.

  1. Тестирование кэширования:
    *   **Поведение при обновлении (`F5`/`Ctrl+F5`):** Обычное обновление должно использовать кэш, а принудительное (`Ctrl+F5`) — игнорировать его, загружая свежие ресурсы.
    *   **Стратегия инвалидации:** Обновляется ли ресурс после истечения `max-age`? Корректно ли работает валидация по `ETag`?
    *   **Консистентность:** Не приводит ли агрессивное кэширование к отображению устаревшего контента (например, старых цен или текста)?
    *   **Частичное обновление:** Если обновился только CSS-файл, загружается ли он корректно, или пользователь видит "сломанный" стиль из-за старого кэша?

Вывод для интервью: Cookie — это паспорт пользователя, который он предъявляет серверу при каждом обращении, а кэш — это его личная библиотека с копиями книг (ресурсов), чтобы не ходить за ними в магазин (сервер) каждый раз. Понимание этой разницы критически важно для тестирования поведения веб-приложений, безопасности, производительности и пользовательского опыта.