Полный технический гайд по HTTP-кодам с примерами

http status codeshttp response codesapi designcachingredirectscore web vitalsobservabilityerror budgetsrate limitingsecurityseoweb developmentкоды httpкэшированиередиректымониторинготказоустойчивостьвеб‑разработка

Содержание

  1. Актуальность
    • Значение кодов состояния HTTP
    • Влияние на клиентов, серверы, поисковые системы и кэширующие слои
    • Особенности проектирования API
    • Оптимизация производительности
    • Надёжность и мониторинг
    • Аспекты безопасности
    • Влияние на SEO
  2. Таблица HTTP-кодов с цветовой индикацией
    • Легенда
    • 🟦 1xx Информационные
    • 🟩 2xx Успех
    • 🟨 3xx Перенаправления
    • 🟥 4xx Ошибки клиента
    • ⬛ 5xx Ошибки сервера

Актуальность

Коды состояния HTTP — это фундаментальные сигналы в работе веб-систем, которые напрямую определяют поведение клиентов, серверов, поисковиков и кэширующих слоёв. Их грамотное применение способно улучшить производительность, надёжность и SEO, при этом снизив инфраструктурные издержки.

В проектировании API правильный выбор кода может кардинально изменить работу клиента. Например, редирект POST с помощью 302 Found может превратить его в GET и нарушить логику оплаты. Использование 308 Permanent Redirect в такой ситуации сохранит метод и обеспечит безопасность транзакций.

Оптимизация производительности также невозможна без статусов. 304 Not Modified позволяет браузеру не загружать заново неизменённые ресурсы, что сокращает время загрузки на 30–40% для тяжёлых сайтов (пример — GitHub Pages). А 206 Partial Content используется Netflix для отдачи только нужных сегментов видео, а не целого файла.

С точки зрения надёжности и мониторинга, статусы определяют уровень критичности инцидента и поведение автоскейлинга. Ошибочная классификация клиентских ошибок (4xx) как серверных (5xx) может вызвать ненужное масштабирование и рост затрат, не устранив корень проблемы.

Статусы — это и инструменты безопасности. Чёткое разделение 401 Unauthorized и 403 Forbidden помогает избежать утечек информации о существовании ресурсов (рекомендация OWASP). Коды 407 Proxy Authentication Required и 511 Network Authentication Required применяются для принудительной авторизации в сети.

Наконец, SEO напрямую зависит от корректного выбора кодов. 301 Moved Permanently передаёт ссылочный вес новому URL, а 302 Found сообщает поисковику о временном переносе. Код 410 Gone ускоряет деиндексацию страниц, что важно при удалении запрещённого контента.

Таким образом, правильное использование кодов HTTP — это инструмент с минимальными затратами и максимальным эффектом: он усиливает наблюдаемость, улучшает UX, повышает SEO и оптимизирует производительность.

Таблица HTTP-кодов с цветовой индикацией

Легенда: 🟦 1xx Информационные, 🟩 2xx Успех, 🟨 3xx Перенаправления, 🟥 4xx Ошибки клиента, ⬛ 5xx Ошибки сервера

ЦветКодНазначениеПример в продакшене
🟦100 ContinueСервер подтвердил заголовки; можно отправлять тело.Большой PUT с Expect: 100-continue в S3, чтобы не слать отклоняемый payload.
🟦101 Switching ProtocolsСервер согласился сменить протокол.Апгрейд HTTP/1.1 до WebSocket для realtime-чата.
🟦102 ProcessingЗапрос принят; обработка не завершена (WebDAV).Длительная многофайловая операция без таймаута клиента.
🟦103 Early HintsХинты предзагрузки до финального ответа.Link: rel=preload для CSS/JS, ускорение LCP.
🟩200 OKУспех с телом ответа.GET /users/1 возвращает JSON-документ.
🟩201 CreatedРесурс создан; Location с URI обязателен.POST /orders → Location: /orders/12345.
🟩202 AcceptedПринято к асинхронной обработке.Постановка задачи кодирования видео в очередь.
🟩204 No ContentУспех без тела.DELETE /files/42 подтверждает удаление.
🟩206 Partial ContentЧастичный ответ по Range.Байтовые диапазоны для MP4-потока.
🟩207 Multi-StatusНесколько статусов (WebDAV).Batch-операции: часть успешна, часть нет.
🟩208 Already ReportedРесурс уже был передан.WebDAV исключает дубли.
🟩226 IM UsedПрименено дельта-кодирование.Endpoint синхронизации отдаёт только изменения.
🟨300 Multiple ChoicesДоступно несколько представлений.Страница выбора языка или формата.
🟨301 Moved PermanentlyПеренос навсегда; обновление SEO-сигналов.Миграция http:// → https:// с консолидацией.
🟨302 FoundВременный редирект; канонический URL прежний.Кампания с A/B лендингом.
🟨303 See OtherПосле POST перейти на GET-ресурс.POST /checkout → GET /orders/123/status.
🟨304 Not ModifiedКэш клиента актуален; тела нет.Попадание по ETag/If-None-Match.
🟨307 Temporary RedirectВременно; метод сохраняется.Перенос POST-трафика в резервный регион на время работ.
🟨308 Permanent RedirectНавсегда; метод сохраняется.Принудительный HTTPS или новый хост без смены метода.
🟥400 Bad RequestНеверный синтаксис или валидация.Битый JSON или нарушение схемы.
🟥401 UnauthorizedНет или просрочена аутентификация.Истёкший JWT для защищённого ресурса.
🟥402 Payment RequiredМонетизированный доступ.Платный тариф API блокирует бесплатный запрос.
🟥403 ForbiddenАутентифицирован, но прав не хватает.Не-админ пытается открыть /admin/users.
🟥404 Not FoundРесурс отсутствует.Неизвестный slug /posts/does-not-exist.
🟥405 Method Not AllowedМетод не поддерживается.PUT на эндпоинте только для GET.
🟥406 Not AcceptableНет представления под Accept.Клиент требует только image/avif.
🟥407 Proxy Authentication RequiredПрокси требует входа.Корпоративный прокси блокирует исходящий трафик.
🟥408 Request TimeoutКлиент слишком долго формировал запрос.API-шлюз закрывает простаивающую загрузку через 30 секунд.
🟥409 ConflictКонфликт состояния ресурса.Несовпадение ETag при оптимистичной блокировке.
🟥410 GoneРесурс удалён намеренно; не восстанавливать.Удалённая статья для деиндексации.
🟥411 Length RequiredНужен Content-Length.Легаси-апстрим принимает только фиксированную длину.
🟥412 Precondition FailedНарушена предусловие If-*.Обновление отклонено из-за устаревшего ETag.
🟥413 Payload Too LargeТело превышает лимит.200 МБ загрузка при лимите 50 МБ.
🟥414 URI Too LongСлишком длинный URI.Огромная query-строка из клиентского приложения.
🟥415 Unsupported Media TypeНеподдерживаемый Content-Type.text/plain отправлен в JSON-API.
🟥416 Range Not SatisfiableНеверный байтовый диапазон.Начало диапазона за пределами размера файла.
🟥417 Expectation FailedТребование Expect не поддержано.Сервер не реализует ожидаемое поведение.
🟥418 Я — чайникТестовый статус RFC 2324.Staging-хелсчек возвращает 418.
🟥421 Misdirected RequestЗапрос ошибочно направлен другому origin.Ошибка SNI в мульти-тенант CDN.
🟥422 Unprocessable ContentСемантически неверное тело.Синтаксис ок, но нарушены бизнес-правила.
🟥423 LockedРесурс заблокирован (WebDAV).Файл “checked-out” другим пользователем.
🟥424 Failed DependencyСбой из-за зависимой операции (WebDAV).Неуспех родителя ломает дочерний PROPPATCH.
🟥425 Too EarlyРано обрабатывать; риск повторов.Митигация 0-RTT в HTTP/2.
🟥426 Upgrade RequiredТребуется другой протокол.Принудительный HTTP/2 или HTTP/3.
🟥428 Precondition RequiredОбязательны предусловия.Запись требует If-Match для конкуррентности.
🟥429 Too Many RequestsПревышен лимит запросов.Троттлинг 100 запросов в минуту на токен.
🟥431 Request Header Fields Too LargeЗаголовки слишком большие.Куки превышают лимит прокси.
🟥451 Unavailable For Legal ReasonsБлокировка по требованию закона.Судебный запрет или геоблок.
500 Internal Server ErrorОбщая ошибка сервера.Необработанное исключение с incident ID.
501 Not ImplementedМетод не реализован.API не поддерживает PATCH.
502 Bad GatewayНекорректный ответ апстрима.Nginx получает 5xx от бэкенда или сбой TLS.
503 Service UnavailableПерегрузка или техработы.Автомасштабирование; очередь ограничивает трафик.
504 Gateway TimeoutТаймаут апстрима.Шлюз ждёт 60 секунд ответа от БД или сервиса.
505 HTTP Version Not SupportedВерсия HTTP не поддерживается.Клиент шлёт HTTP/0.9 на HTTP/1.1 сервер.
506 Variant Also NegotiatesОшибка content negotiation.Петля из-за неверного Alternates.
507 Insufficient StorageНедостаточно места (WebDAV).Превышена квота ФС на WebDAV-шаре.
508 Loop DetectedОбнаружен бесконечный цикл (WebDAV).Циклическая привязка коллекции.
510 Not ExtendedТребуются расширения.Операция требует проприетарного расширения.
511 Network Authentication RequiredНужен вход в сеть.Captive portal блокирует HTTP до авторизации.