Заголовки, cookies и сессии
заголовки передают метаданные, а cookies и сессии помогают сохранять состояние между запросами.
Почему это важно: Эта тема лежит под авторизацией, пользовательскими сессиями, CSRF-защитой, локализацией и многими повседневными backend-задачами. Без неё сложно понимать, как приложение 'помнит' пользователя между разными запросами.
Главная идея
Хотя HTTP сам по себе stateless, приложения умеют строить поверх него авторизацию, персонализацию и отслеживание состояния.
Как это выглядит на практике
- Клиент отправляет запрос с заголовками вроде Accept, Authorization или Content-Type.
- Сервер может вернуть заголовок Set-Cookie.
- Браузер сохранит cookie и отправит его в следующих запросах к тому же домену.
- Backend по cookie находит сессию и понимает, какой пользователь делает запрос.
Что происходит под капотом
- Заголовки помогают серверу понять контекст: какой формат данных пришёл, какой формат ответа ожидается, есть ли токен доступа и можно ли кэшировать результат.
- Cookie физически хранится у клиента, но часто содержит лишь идентификатор, по которому backend ищет серверную сессию в памяти, Redis или базе.
- Сессия нужна для связки нескольких запросов с одной пользовательской историей: логин, корзина, настройки интерфейса, flash-сообщения.
- В современных системах часть аутентификации строится не на серверных сессиях, а на токенах, но headers и cookies всё равно остаются ключевыми механизмами передачи данных.
Типичные ошибки и заблуждения
- Ошибка: cookie и session — это одно и то же. Cookie хранится у клиента, session обычно живёт на стороне сервера или во внешнем хранилище.
- Ошибка: HTTP полностью stateless, значит состояние невозможно. Состояние возможно, просто оно строится поверх протокола дополнительными механизмами.
- Ошибка: cookies нужны только для логина. Они используются и для предпочтений, аналитики, CSRF-токенов и других сценариев.
- Ошибка: headers — это второстепенные детали. На практике многие backend-решения завязаны именно на заголовках.
Ключевые выводы
- Заголовки описывают контекст запроса и ответа.
- Cookies хранятся у клиента, а session data часто живёт на сервере или во внешнем хранилище.
- Механизм сессий особенно важен для аутентификации в веб-приложениях.
- Headers, cookies и sessions вместе образуют слой пользовательского контекста.
Термины урока
Связь с работой backend-разработчика
Без понимания cookies, заголовков и сессий сложно проектировать логин, защиту маршрутов, CSRF-защиту и работу пользовательского состояния.
Мини-разбор реальной ситуации
Пользователь вошёл в систему, но на следующем запросе сервер снова считает его гостем. Причина может быть не в базе и не в логике логина: cookie не установилась, была отправлена не на тот домен или браузер не вернул её обратно из-за политики безопасности.
Что запомнить
- HTTP stateless, но веб-приложения умеют строить состояние поверх него.
- Cookie — это не сама сессия, а обычно ключ к ней.
- Headers часто несут критически важный контекст для backend-логики.
Итог
HTTP формально stateless, но именно заголовки и сессионные механизмы позволяют веб-приложениям помнить пользователя между запросами.