Всем привет! Я решил сделать для вас шпаргалку с основными статус-кодами протокола HTTP/HTTPS. Для более подробного погружения в тему рекомендую прочитать RFC 9110, который регламентирует статус коды и весь протокол.

Разновидности статус кодов
Разновидности статус кодов

❓ Что такое status code или коды состояния ответа?

Код состояния ответа — это трёхзначный целочисленный код, описывающий результат запроса и семантику ответа, включая информацию об успешности запроса и его содержимом (если таковое имеется). Все допустимые коды состояния находятся в диапазоне от 100 до 599 включительно.

Первая цифра кода состояния определяет класс ответа. Последние две цифры не имеют никакого отношения к классификации.

Первая цифра может принимать пять значений:

  1. 1xx (Информационное сообщение): запрос получен, процесс продолжается

  2. 2xx (Успешно): запрос был успешно получен, понят и принят

  3. 3xx (Перенаправление): для завершения запроса необходимо предпринять дополнительные действия

  4. 4xx (Ошибка клиента): запрос содержит некорректный синтаксис или не может быть выполнен

  5. 5xx (Ошибка сервера): сервер не смог выполнить, по‑видимому, действительный запрос

Важное уточнение: коды состояния HTTP являются расширяемыми. Клиент не обязан понимать значение всех зарегистрированных кодов состояния, хотя такое понимание желательно.

Однако клиент ОБЯЗАН понимать класс любого кода состояния, определяемый первой цифрой, и рассматривать нераспознанный код состояния как эквивалентный коду состояния x00 этого класса.

Иногда используют статус коды вне диапазона 100-599 (например, 600-999), но они используются для внутренней связи не связанной с HTTP/HTTPS, например, ошибка конкретной библиотеки. Клиент такую ошибку может приравнивать к 5xx (Ошибка сервера).

Некоторые статус коды являются эвристически кэшируемыми (например, 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 и 501), то есть браузер кэширует ответ с ними, даже если это не указано явно.

? Что такое URI, URL и URN?

В документации встречается аббревиатура URI, кратко разберём что это такое сразу.

  • URI (Uniform Resource Identifier) — это компактная последовательность символов, идентифицирующая абстрактный или физический ресурс. Он включает в себя URN и URL.

  • URL (Uniform Resource Locator) — это тип URI, который идентифицирует ресурс через описание способа его нахождения (протокол и так далее).

  • URN (Uniform Resource Name) — это тип URI, который должен оставаться глобально уникальным и постоянным (имя ресурса, ISBN книг).

⚡️ Наиболее используемые статус коды

1xx (Информационные)

  • 100 (Continue, продолжить) — сервер получил начальную часть запроса и ждёт недостающих данных, чтобы дать окончательный ответ клиенту.

  • 101 (Switching Protocols, переключение протокола) — сервер понимает и готов выполнить запрос клиента, поступающий через поле заголовка Upgrade, об изменении используемого протокола приложения в данном соединении (так происходит переход с HTTP на websocket).

2xx (Успешные)

  • 200 (Ok, успех) — запрос выполнен успешно, обычно есть содержимое в ответе.

  • 201 (Created, создано) — запрос выполнен и в результате создан один или несколько новых ресурсов, содержимое ответа обычно содержит этот ресурс.

  • 202 (Accepted, принято) — запрос принят к обработке, но обработка еще не завершена.

  • 203 (Non-authoritative information, неавторитетная информация) — запрос был успешным, но содержимое было изменено по сравнению с ответом исходного сервера 200 (OK) преобразующим прокси-сервером.

  • 204 (No content, нет содержимого) — сервер успешно выполнил запрос и в ответе нет дополнительного содержимого для отправки.

  • 205 (Reset content, сброс содержимого) — сервер выполнил запрос и желает, чтобы пользовательский агент сбросил «представление документа», которое вызвало отправку запроса, до его исходного состояния, полученного от исходного сервера.

  • 206 (Partial content, частичное содержание) — сервер успешно выполняет запрос диапазона для целевого ресурса, передавая одну или несколько частей выбранного представления.

3xx (Перенаправление)

  • 300 (Multiple choices, множественный выбор) — указывает на то, что целевой ресурс имеет более одного представления, каждое со своим более конкретным идентификатором, и предоставляется информация об альтернативах.

  • 301 (Moved permanently, перемещено навсегда) — указывает на то, что целевому ресурсу присвоен новый постоянный URI.

  • 302 (Found, найдено) — указывает на то, что целевой ресурс временно находится по другому URI.

  • 303 (See Other, смотри другое) — сервер перенаправляет пользовательский агент на другой ресурс, как указано в поле заголовка Location.

  • 304 (Not Modified, не изменено) — указывает на то, что у нас и так актуальная версия ресурса и нет надобности сервера отправлять его снова.

  • 307 (Temporary redirect, временное перенаправление) — целевой ресурс временно находится под другим URI, и пользовательский агент НЕ ДОЛЖЕН изменять метод запроса.

  • 308 (Permanent redirect, постоянное перенаправление) — аналог 301, но с гарантией неизменности методов.

4xx (Ошибка клиента)

  • 400 (Bad Request, неверный запрос) — сервер не может обработать запрос из-за ошибки клиента (например, если не подходит к pydantic схеме).

  • 401 (Unauthorized, не авторизован) — запрос не выполнен, так как отсутствуют действительные учётные данные. (Кидаю её, если пользователь дёргает ручку без токена или с невалидным токеном).

  • 403 (Forbidden, запрещено) — сервер понял запрос, но отказался его выполнить. (Кидаю, когда пользователь пытается редактировать не свой профиль).

  • 404 (Not Found, не найдено) — сервер не обнаружил ресурс.

  • 405 (Method not allowed, метод не разрешен) — метод известен серверу, но не применим к этому ресурсу.

  • 408 (Request Time-out, тайм-аут запроса) — сервер не получил полный запрос в течение времени ожидания.

  • 409 (Conflict, конфликт) — запрос не выполнен из-за конфликта с текущим состоянием ресурса. (Кидаю, когда пользователь с таким именем уже есть).

5xx (Ошибка сервера)

  • 500 (Внутренняя ошибка сервера) — исключительная ситуация на сервере.

  • 503 (Сервис недоступен) — сервер не может обработать запрос из-за перегрузки или тех. обслуживания.

На этом всё, до встречи!

Комментарии (11)


  1. Myclass
    07.05.2026 13:27

    Список кодов состояния HTTP — Википедия
    ru.wikipedia.org


    1. 413x
      07.05.2026 13:27

      На Wikipedia простыня, сверху слишком коротко, снизу слишком детально. Пожалуй в статье оптимально.


    1. PXI Автор
      07.05.2026 13:27

      Спасибо за комментарий! Моей целью было не рассказать что-то совершенно новое в данной статье, а сделать именно шпаргалку. Я хотел сохранить в ней верную техническую информацию, но при этом убрать лишнее или разжевать подробнее моменты, которые, лично мне, кажутся не совсем очевидными сразу.

      Но обязательно учту ваше замечание в следующих статьях.


  1. nikolay-ermolenko
    07.05.2026 13:27

    Как вы отличаете удалённого пользователя от опечатки в URI?

    Например

    users/99999 - такого пользователя нет в системе

    useers/452 - опечатка в URI, хотя ID правильный.

    Это всё 404?


    1. space2pacman
      07.05.2026 13:27

      users/99999 - 404 Not found

      useers/452 - 400 Bad request / 404 Not found


    1. PXI Автор
      07.05.2026 13:27

      Здесь в первом случае сто процентов 404 кидаем, а во втором уже зависит от того, что нам важнее. Мы хотим строго соответствовать требованиям или понимать, что именно произошло. Правильнее кинуть 404, но в теле ответа описать, что проблема в пути. Но можно кинуть 400, и так проще будет обработать на фронте.


  1. space2pacman
    07.05.2026 13:27

    О, новый аккаунт чтобы рекламировать свой проект создает мусорные статьи. Да и статья нейронкой написана. Однозначно лайк(нет).


    1. PXI Автор
      07.05.2026 13:27

      Почему вы решили, что это ии? Я, например, в качестве доказательства обратного могу привести этот скриншот:

      Закинул статью в gigachecker
      Закинул статью в gigachecker

      Можете так же проверить мою статью через другие ИИ детекторы. Или ваши глаза будут более точны в определении нейротекста?

      А по поводу мусорных статей ради рекламы, если бы это было только ради этого, то я и в эту статью обязательно поставлял ссылки на свои проекты.

      Отчасти я согласен, что такую информацию можно найти и в других источниках, но я специально начал с темы, которая является общей и более нейтральной. Так как это моя первая статья в Хабре за всё время и таким образом я прощупал почву.

      Но в любом случае спасибо за ваше мнение, буду исправляться и делать статьи, которые будут отражать мой взгляд и опыт в большей степени, чем теория доступная каждому. Или вы можете посоветовать что-то другое?


      1. space2pacman
        07.05.2026 13:27

        "Или вы можете посоветовать что-то другое?"
        Писать о том о чем еще не писали.


        1. Myclass
          07.05.2026 13:27

          Я не публиковал ни одной статьи здесь. У меня на это свои причины. Найти новую тему, о которой никто не писал, конечно-же нелегко, но и повторять основы веба, которым уже ума лет - себя не уважать. Вот например описания из документации мозиллы.

          https://developer.mozilla.org/ru/docs/Web/HTTP/Reference/Status

          она постоянно обновляется. Но и там больше информации, как например совместимость с браузерами. А просто перечислять то, что миру уже известно много раз и не дополнить чем-то новенькоим или поделится опытом работы в этом случае тем или иным кодом - лёгкий, но неблагодарный путь. Даже подача информации дизайном от всех других не отличается. Тк и на этом уровне - нежелание понравится читателю своей оригинальностью - простая отговорка - хотел в одном месте собрать всё. Таких мест уже уйма и всё - это ничего не значит.


          1. PXI Автор
            07.05.2026 13:27

            Спасибо за комментарий, учту ваше мнение