Cookie
Применение
Заголовок Cookie переносит пары «имя — значение», ранее сохранённые заголовком ответа Set-Cookie. После того как сервер установил cookie, браузер включает соответствующий заголовок Cookie в последующие запросы к тому же домену с учётом правил пути, домена и срока действия.
Cookie поддерживают состояние поверх протокола HTTP, который состояния не хранит. К типичным применениям относятся управление сессиями, токены аутентификации, пользовательские настройки и идентификаторы отслеживания. Сервер читает заголовок Cookie, чтобы опознать клиента, восстановить контекст сессии или применить сохранённые настройки.
Несколько пар cookie помещаются в одну строку заголовка Cookie и разделяются точкой с запятой и пробелом. Такой синтаксис передаёт только имя и значение каждой cookie. Атрибуты вроде Expires, Path, Secure и HttpOnly существуют только в заголовке Set-Cookie и в заголовке Cookie не повторяются.
Cookie: name1=value1; name2=value2
Пример
Сервер устанавливает в ответе три cookie. Cookie sid хранит идентификатор сессии, lang — языковые предпочтения, а theme — настройку отображения.
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sid=abc123; Path=/; Secure; HttpOnly
Set-Cookie: lang=en; Path=/
Set-Cookie: theme=dark; Path=/
В следующем запросе к тому же домену браузер включает все подходящие cookie. В заголовке Cookie передаются только пары «имя — значение».
GET /dashboard HTTP/1.1
Host: example.re
Cookie: sid=abc123; lang=en; theme=dark
POST-запрос к конечной точке входа получает сессионную cookie. Атрибут Secure гарантирует, что cookie передаётся только по HTTPS, а HttpOnly запрещает доступ к ней из JavaScript.
HTTP/1.1 200 OK
Set-Cookie: token=eyJhbGciOi; Secure; HttpOnly; SameSite=Strict
Последующие запросы переносят токен автоматически.
GET /api/profile HTTP/1.1
Host: example.re
Cookie: token=eyJhbGciOi
Примечание
Разрабатываемое обновление спецификации cookie пересматривает работу с cookie: значения SameSite по умолчанию, префиксы __Host- и __Secure-, а также атрибут Partitioned для cookie в сторонних контекстах. Черновик находится в активной разработке.
Применение SameSite
Если атрибут SameSite не задан, браузеры по умолчанию используют SameSite=Lax. Это по умолчанию блокирует большую часть межсайтовой передачи cookie. Для SameSite=None требуется флаг Secure. Полный справочник по SameSite
Влияние на SEO
Googlebot отправляет cookie, когда их устанавливает источник, но не сохраняет их между отдельными сеансами сканирования. Крупные cookie на доменах со статическими ресурсами увеличивают размер запросов во время отрисовки. Отдельный домен без cookie для статических ресурсов позволяет избежать этих накладных расходов.