В каком месте HTTP-запроса находятся Cookie
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Где находятся Cookie в HTTP-запросе
Cookie передаются в заголовках (headers) HTTP-запроса — конкретно в заголовке Cookie. Это строго стандартизировано в RFC 6265.
Структура HTTP-запроса
HTTP-запрос состоит из трёх частей:
- Стартовая строка — метод, URL, версия протокола
- Заголовки (Headers) — метаданные запроса
- Тело (Body) — данные (опционально, например в POST)
Cookie находятся именно во второй части — в заголовках.
Пример HTTP-запроса с Cookie
GET /api/user/profile HTTP/1.1
Host: example.com
Accept: application/json
Cookie: session_id=abc123xyz; theme=dark; lang=ru
Kак видно, все куки объединяются в одну строку заголовка Cookie, разделённые точкой с запятой и пробелом.
Полный цикл работы с Cookie
1. Сервер устанавливает Cookie через ответ:
HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: session_id=abc123xyz; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=3600
Set-Cookie: theme=dark; Path=/; Max-Age=86400
Здесь используется заголовок ответа Set-Cookie — для каждой куки отдельный заголовок.
2. Браузер сохраняет куки и отправляет их обратно:
При каждом последующем запросе к тому же домену браузер автоматически добавляет заголовок Cookie с соответствующими куками.
Атрибуты Cookie и их влияние
| Атрибут | Назначение |
|---|---|
HttpOnly | Недоступна через document.cookie — защита от XSS |
Secure | Передаётся только по HTTPS |
SameSite=Strict/Lax/None | Контроль отправки при кросс-сайт запросах |
Domain | Домен, для которого действует кука |
Path | Путь на сервере, для которого действует кука |
Max-Age / Expires | Время жизни куки |
Cookie и JavaScript
Доступ к кукам из JavaScript:
// Чтение (только non-HttpOnly)
console.log(document.cookie); // "theme=dark; lang=ru"
// Установка
document.cookie = "username=john; path=/; max-age=3600";
// Удаление (установить истёкшую дату)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";
Важно: document.cookie не перезаписывает все куки при присваивании — каждая операция добавляет или обновляет только одну куку.
Cookie vs другие способы хранения данных аутентификации
| Хранилище | Где передаётся | Автоматически браузером | XSS-защита |
|---|---|---|---|
| Cookie (HttpOnly) | Header Cookie | Да | Да |
| localStorage | Нужно вручную (Bearer) | Нет | Нет |
| sessionStorage | Нужно вручную (Bearer) | Нет | Нет |
CSRF и Cookie
Поскольку браузер автоматически прикрепляет куки к каждому запросу, это создаёт уязвимость CSRF (Cross-Site Request Forgery). Атакующий сайт может отправить запрос к вашему API — и браузер автоматически приложит куки жертвы.
Защита:
SameSite=StrictилиSameSite=Lax— браузер не отправляет куки при кросс-сайт запросах- CSRF-токены в теле или отдельном заголовке
- Проверка заголовка
Origin/Refererна сервере
Итог
Cookie находятся в заголовке Cookie HTTP-запроса. Сервер устанавливает их через заголовок Set-Cookie в ответе. Браузер автоматически отправляет все подходящие куки при каждом запросе к соответствующему домену и пути. Понимание этого механизма критично для реализации безопасной аутентификации.