Начальный ~24 мин чтения

Заголовки, cookies и сессии

Урок 3 из 4 в курсе HTTP для backend-разработчика

Заголовки, cookies и сессии

заголовки передают метаданные, а cookies и сессии помогают сохранять состояние между запросами.

Почему это важно: Эта тема лежит под авторизацией, пользовательскими сессиями, CSRF-защитой, локализацией и многими повседневными backend-задачами. Без неё сложно понимать, как приложение 'помнит' пользователя между разными запросами.

Главная идея

Хотя HTTP сам по себе stateless, приложения умеют строить поверх него авторизацию, персонализацию и отслеживание состояния.

Как это выглядит на практике

  1. Клиент отправляет запрос с заголовками вроде Accept, Authorization или Content-Type.
  2. Сервер может вернуть заголовок Set-Cookie.
  3. Браузер сохранит cookie и отправит его в следующих запросах к тому же домену.
  4. Backend по cookie находит сессию и понимает, какой пользователь делает запрос.

Что происходит под капотом

  • Заголовки помогают серверу понять контекст: какой формат данных пришёл, какой формат ответа ожидается, есть ли токен доступа и можно ли кэшировать результат.
  • Cookie физически хранится у клиента, но часто содержит лишь идентификатор, по которому backend ищет серверную сессию в памяти, Redis или базе.
  • Сессия нужна для связки нескольких запросов с одной пользовательской историей: логин, корзина, настройки интерфейса, flash-сообщения.
  • В современных системах часть аутентификации строится не на серверных сессиях, а на токенах, но headers и cookies всё равно остаются ключевыми механизмами передачи данных.

Типичные ошибки и заблуждения

  • Ошибка: cookie и session — это одно и то же. Cookie хранится у клиента, session обычно живёт на стороне сервера или во внешнем хранилище.
  • Ошибка: HTTP полностью stateless, значит состояние невозможно. Состояние возможно, просто оно строится поверх протокола дополнительными механизмами.
  • Ошибка: cookies нужны только для логина. Они используются и для предпочтений, аналитики, CSRF-токенов и других сценариев.
  • Ошибка: headers — это второстепенные детали. На практике многие backend-решения завязаны именно на заголовках.

Ключевые выводы

  • Заголовки описывают контекст запроса и ответа.
  • Cookies хранятся у клиента, а session data часто живёт на сервере или во внешнем хранилище.
  • Механизм сессий особенно важен для аутентификации в веб-приложениях.
  • Headers, cookies и sessions вместе образуют слой пользовательского контекста.

Термины урока

Header: метаданные HTTP-сообщения.
Cookie: маленький фрагмент данных, который браузер хранит и отправляет обратно.
Session: способ связать несколько запросов одного пользователя.
Authorization: заголовок, часто используемый для передачи токена доступа.

Связь с работой backend-разработчика

Без понимания cookies, заголовков и сессий сложно проектировать логин, защиту маршрутов, CSRF-защиту и работу пользовательского состояния.

Мини-разбор реальной ситуации

Пользователь вошёл в систему, но на следующем запросе сервер снова считает его гостем. Причина может быть не в базе и не в логике логина: cookie не установилась, была отправлена не на тот домен или браузер не вернул её обратно из-за политики безопасности.

Что запомнить

  • HTTP stateless, но веб-приложения умеют строить состояние поверх него.
  • Cookie — это не сама сессия, а обычно ключ к ней.
  • Headers часто несут критически важный контекст для backend-логики.

Итог

HTTP формально stateless, но именно заголовки и сессионные механизмы позволяют веб-приложениям помнить пользователя между запросами.