Cookies: как HTTP хранит состояние

Cookies: как HTTP хранит состояние

Мы уже говорили, что HTTP — stateless протокол. Но почти каждый сайт помнит, кто ты, даже после перезагрузки браузера. Главный механизм, который это обеспечивает — cookies. Разберём, как они работают, какие у них ограничения и почему каждые полгода выходят законы про «cookie-баннеры».

Что такое cookie

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

Процесс выглядит так:

  1. Клиент впервые заходит на сайт.
  2. Сервер в ответе присылает заголовок: Set-Cookie: session_id=abc123; HttpOnly; Secure.
  3. Браузер сохраняет cookie на диске.
  4. При следующем запросе к тому же домену браузер добавляет: Cookie: session_id=abc123.
  5. Сервер видит cookie, находит сессию в базе и понимает, кто перед ним.

Атрибуты cookie

Cookie — не просто пара ключ-значение. У них есть атрибуты, управляющие поведением:

  • Domain. К какому домену и поддоменам прикреплять cookie. Domain=example.com — cookie будет отправляться на example.com и все поддомены (blog.example.com, api.example.com). Если не указан — только на текущий домен (без поддоменов).
  • Path. Для каких путей на сайте действует cookie. Path=/admin — cookie отправится только для URL внутри /admin.
  • Expires / Max-Age. Когда cookie истекает. Max-Age=3600 — cookie живёт 1 час. Без этого атрибута cookie живёт до закрытия браузера (сессионная cookie).
  • HttpOnly. Запрещает JavaScript доступ к cookie через document.cookie. Критически важно для безопасности: даже если злоумышленник внедрит XSS-скрипт, он не украдёт session_id. Всегда ставь HttpOnly на сессионные cookie.
  • Secure. Cookie отправляется только по HTTPS. Без этого атрибута cookie может утечь при MITM-атаке на HTTP-соединении.
  • SameSite. Защита от CSRF-атак: Strict (cookie не отправляется с кросс-доменных переходов), Lax (отправляется при навигации, но не при AJAX-запросах с других сайтов), None (отправляется всегда, требует Secure).

Сессионные vs постоянные cookie

  • Сессионные. Нет атрибута Expires или Max-Age. Хранятся в памяти браузера, удаляются при его закрытии.
  • Постоянные. Есть срок истечения. Хранятся на диске и переживают перезапуск браузера. Пример: «Запомнить меня» при логине.

Third-party cookies

Cookies могут устанавливаться не только сайтом, который ты посещаешь, но и сторонними сервисами, встроенными в страницу (рекламные сети, аналитика, соцсети). Это third-party cookies:

Ты на сайте shop.com, но там встроен iframe с ads.com/tracker
ads.com устанавливает cookie с Domain=ads.com
Теперь ads.com видит тебя на всех сайтах, где есть их трекер

Именно third-party cookies — основа рекламного трекинга. Поэтому браузеры постепенно их запрещают: Safari и Firefox уже блокируют, Chrome планирует полностью отказаться. Современная альтернатива — server-side аналитика и контекстная реклама без персонального трекинга.

Альтернативы cookies

Cookies не единственный способ хранить состояние на клиенте:

  • localStorage. Хранилище ключ-значение в браузере (5–10 МБ). Данные не отправляются автоматически с запросами — JavaScript сам решает, когда их использовать. Подходит для настроек UI, кэша, но не для сессий (нельзя поставить HttpOnly).
  • sessionStorage. То же, что localStorage, но данные живут до закрытия вкладки.
  • JWT-токены в Authorization-заголовке. Альтернатива сессионным cookie для API: токен хранится в JavaScript и отправляется в заголовке Authorization: Bearer <jwt>.

Проверь себя

  1. Что делает атрибут HttpOnly?
  2. Чем localStorage отличается от cookie?
  3. Почему third-party cookies постепенно запрещают?
<details> <summary>Ответы</summary>
  1. HttpOnly запрещает JavaScript читать cookie. Это защищает от кражи сессионных cookie через XSS-атаки.
  2. localStorage: больше объём (5+ МБ vs 4 КБ), данные не отправляются автоматически с HTTP-запросами, нет атрибутов безопасности (HttpOnly, Secure, SameSite). Не подходит для чувствительных данных.
  3. Потому что они позволяют рекламным сетям отслеживать пользователя между разными сайтами без его согласия, нарушая приватность.
</details>

Что унести с урока

  • Cookies — основной механизм хранения сессий в stateless-HTTP. Сервер устанавливает, браузер присылает обратно.
  • HttpOnly, Secure, SameSite — обязательные атрибуты для безопасности.
  • Сессионные cookies живут до закрытия браузера, постоянные — до истечения срока.
  • third-party cookies умирают. Альтернативы: localStorage для несекретных данных, JWT-токены для API.

В следующем уроке разберём механизмы кэширования HTTP — Cache-Control, ETag и Last-Modified.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике