HTTP-коды ответа
Тема дорожной карты · Backend разработчик
Коды состояния HTTP — трёхзначные числовые коды, возвращаемые сервером в ответ на каждый HTTP-запрос, сообщающие результат клиентам и промежуточным звеньям, таким как балансировщики нагрузки и CDN. Бэкенд-разработчики используют коды состояния для выражения точной семантики: 200 OK при успешном извлечении, 201 Created после записи ресурса через REST API, 400 Bad Request для некорректных входных данных, 401 Unauthorized при отсутствии JWT или токена OAuth 2.0, 403 Forbidden при отказе в доступе, 404 Not Found для отсутствующих ресурсов, 429 Too Many Requests при срабатывании ограничения частоты запросов и 500 Internal Server Error для необработанных исключений. Корректный выбор кодов состояния HTTP жизненно важен для удобства использования API — клиенты полагаются на них для логики повторных попыток, автоматических выключателей и обработки ошибок в микросервисных архитектурах. Семейство 5xx сигнализирует о серверных сбоях и должно инициировать алерты в системах мониторинга Prometheus или Grafana. Хорошо спроектированные REST API, описанные с помощью спецификаций OpenAPI / Swagger, документируют каждый ожидаемый код состояния для каждого эндпоинта, обеспечивая точную генерацию клиентского кода и интеграционное тестирование.
Как это работает
HTTP-коды ответа — 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.
Типичные ошибки
Ловушки HTTP-коды ответа: 200 OK с {"error": "..."} вместо нормальной 4xx/5xx (ломает client retry и observability); игнор Idempotency-Key для POST, создающего ресурсы (retry дублируют); session-токены в URL (логируются везде); нет gzip/brotli (медленные клиенты на плохих сетях); Server: header выдаёт версию стека. Прочтите RFC 9110 (HTTP semantics) один раз.