Заголовки и cookies

Тема дорожной карты · Backend разработчик

HTTP-заголовки — поля метаданных вида ключ-значение, передаваемые с каждым HTTP-запросом и ответом, управляющие обработкой, кешированием, безопасностью и маршрутизацией содержимого — что делает их одним из мощнейших инструментов бэкенд-разработчика для влияния на поведение клиентов и прокси. Заголовки запроса передают возможности и намерения клиента: Authorization: Bearer <jwt> несёт учётные данные OAuth 2.0 или JWT, Content-Type: application/json объявляет формат тела запроса, Accept: application/json, application/x-protobuf сигнализирует о предпочтительных форматах ответа, а If-None-Match / If-Modified-Since разрешают условные запросы, возвращающие 304 Not Modified без повторной передачи неизменённого содержимого. Заголовки ответа формируют кеширование и безопасность: Cache-Control: max-age=3600, public указывает CDN и браузерам кешировать ответ на один час; ETag предоставляет отпечаток содержимого для валидации кеша; заголовки безопасности Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options и X-Frame-Options укрепляют модель безопасности браузера против XSS, кликджекинга и MIME-сниффинга. CORS целиком согласовывается через HTTP-заголовки — Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers в ответе сервера и Origin в предварительном запросе OPTIONS — делая корректную конфигурацию заголовков обязательной для любого бэкенда, обслуживающего фронтенд на другом домене. В Express.js middleware helmet устанавливает наиболее важные HTTP-заголовки безопасности одной строкой; в Nginx директивы add_header в блоке сервера достигают того же; а в Spring Boot SecurityFilterChain конфигурирует заголовки через DSL headers().

Как это работает

Заголовки и cookies — request/response протокол поверх TCP (или QUIC для HTTP/3). Запрос имеет метод (GET, POST, PUT, DELETE, PATCH), URL, заголовки, опциональное тело; ответ — статус-код (2xx success, 3xx redirect, 4xx client, 5xx server), заголовки, тело. HTTP/1.1 — одно TCP-соединение на запрос (с keep-alive переиспользованием); HTTP/2 мультиплексирует много запросов в одно соединение; HTTP/3 — поверх UDP через QUIC. TLS (HTTPS) обязателен в 2026.

Когда применять

HTTP/REST — для большинства публичных API: lingua franca, поддерживается клиентами, тулинг для отладки повсюду. gRPC — для internal service-to-service, когда важны latency + schema-дисциплина. WebSockets — для двунаправленного realtime. SSE (Server-Sent Events) — для server-push-only. Всегда за reverse proxy (Caddy, nginx, traefik), который держит TLS, сжатие, rate limit.

Типичные ошибки

Ловушки Заголовки и cookies: 200 OK с {"error": "..."} вместо нормальной 4xx/5xx (ломает client retry и observability); игнор Idempotency-Key для POST, создающего ресурсы (retry дублируют); session-токены в URL (логируются везде); нет gzip/brotli (медленные клиенты на плохих сетях); Server: header выдаёт версию стека. Прочтите RFC 9110 (HTTP semantics) один раз.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…