На какие группы делятся коды состояния HTTP и что они означают

Ответ

Коды состояния HTTP — это стандартные ответы сервера на запросы клиента. Они группируются в пять классов по первой цифре, каждый из которых указывает на общий результат обработки запроса.

Основные классы кодов:

  • 1xx (Informational): Запрос принят и продолжает обрабатываться. Клиент должен ожидать окончательного ответа.

    • 100 Continue: Сервер получил заголовки запроса и готов принять тело запроса.
    • 102 Processing: Запрос обрабатывается, но ответ еще не готов (используется в WebDAV).
  • 2xx (Success): Запрос был успешно получен, понят и принят.

    • 200 OK: Стандартный успешный ответ для GET, PUT, POST.
    • 201 Created: Запрос успешно выполнен, и в результате был создан новый ресурс.
    • 204 No Content: Сервер успешно обработал запрос, но не возвращает никакого содержимого.
  • 3xx (Redirection): Для выполнения запроса требуются дальнейшие действия со стороны клиента.

    • 301 Moved Permanently: Ресурс навсегда перемещен по новому URL.
    • 302 Found: Временное перенаправление. Клиент должен использовать старый URL для будущих запросов.
    • 304 Not Modified: Ресурс не изменялся с момента последнего запроса (используется для кэширования).
  • 4xx (Client Error): Запрос содержит синтаксическую ошибку или не может быть выполнен.

    • 400 Bad Request: Сервер не может обработать запрос из-за ошибки на стороне клиента (например, неверный формат JSON).
    • 401 Unauthorized: Для доступа к ресурсу требуется аутентификация.
    • 403 Forbidden: У клиента нет прав доступа к содержимому, аутентификация не поможет.
    • 404 Not Found: Сервер не может найти запрошенный ресурс.
  • 5xx (Server Error): Сервер не смог выполнить корректно составленный запрос.

    • 500 Internal Server Error: Общая ошибка сервера, которая произошла при обработке запроса.
    • 502 Bad Gateway: Сервер, выступая в роли шлюза, получил недействительный ответ от вышестоящего сервера.
    • 503 Service Unavailable: Сервер временно не может обрабатывать запросы (например, из-за перегрузки или технического обслуживания).

Пример проверки статуса в Python с помощью requests:

import requests

try:
    response = requests.get('https://api.github.com/invalid-url')

    # Проверяем, был ли запрос успешным (коды 2xx)
    response.raise_for_status() 

except requests.exceptions.HTTPError as err:
    print(f"HTTP ошибка: {err}")
    print(f"Статус-код: {err.response.status_code}")

# Пример успешного запроса
response = requests.get('https://api.github.com')
if response.status_code == 200:
    print('nЗапрос к API GitHub успешен!')

Ответ 18+ 🔞

А, слушай, про эти ваши HTTP-статусы, блядь. Ну, это как в армии, понимаешь? Ты серверу команду даёшь, а он тебе в ответ — отмазку. И каждая отмазка — это целая история, ёпта. Вот, разбираем по полочкам, чтобы не быть, как Герасим, который нихуя не понял и Муму утопил.

Основные разряды этих цифровых отмазок:

  • 1xx (Информационные, типа «Жди»): Сервер такой: «Я твой запрос получил, чувак, не дёргайся, ща подумаю». Это как «обрабатывается ваш запрос, оставайтесь на линии».

    • 100 Continue: «Ну, заголовки я прочитал, давай дальше, тело запроса шли, не стесняйся».
    • 102 Processing: «Я в процессе, блядь, не торопи, ща всё будет» (это для заумных WebDAV-шников).
  • 2xx (Успех, «Всё заебись»): Вот это любовь. Запрос принят, понят и исполнен. Красота.

    • 200 OK: Стандартный «всё пучком». Забрал данные, отправил, обновил — всё окей.
    • 201 Created: «Я, сука, не только сделал, но и новую хуйню создал по твоей просьбе. Вот тебе ссылка на неё».
    • 204 No Content: «Сделал, что просил. Но отвечать мне тебе нехуй. Иди своей дорогой».
  • 3xx (Перенаправления, «Иди нахуй, но в другое место»): Тут сервер начинает мудохаться. «То, что тебе надо, не здесь, иди туда-то».

    • 301 Moved Permanently: «Ресурс съехал навсегда, вот новый адрес. Запомни его, пидор, и больше сюда не ходи».
    • 302 Found: «На, временно он тут. Но в следующий раз стучи в старую дверь, я тебя опять перенаправлю».
    • 304 Not Modified: «У тебя же в кэше уже лежит свежая версия, зачем меня дергаешь? Иди отсюда».
  • 4xx (Ошибки клиента, «Сам дурак»): А вот это уже твои косяки, дружок. Ты наебнулся.

    • 400 Bad Request: «Ты мне какую-то хуйню прислал, я даже разобрать не могу. JSON кривой, или запрос ебаный».
    • 401 Unauthorized: «А ты кто такой? Паспорт покажи (логин-пароль). Без паспорта — ни хуя».
    • 403 Forbidden: «Паспорт-то у тебя есть, но в этот клуб тебе вход воспрещён. Иди нахуй».
    • 404 Not Found: «Классика, блядь! Ты просишь то, чего у меня нет. Вообще. Никогда не было. Может, ты перепутал?»
  • 5xx (Ошибки сервера, «Я дурак»): А это уже сервер признаётся, что он — мудак. Запрос-то у тебя нормальный, а он нихуя не может.

    • 500 Internal Server Error: «Ой, блядь... У меня тут внутри всё посыпалось, я сам не знаю почему. Сорян».
    • 502 Bad Gateway: «Я, как шлюз, спросил у другого сервака, а он мне какую-то дичь ответил. Я в ауте».
    • 503 Service Unavailable: «Я сейчас перегружен/на техобслуживании/просто не хочу работать. Заходи позже, если выживешь».

Ну и как с этим жить на Python, например с requests:

import requests

try:
    response = requests.get('https://api.github.com/invalid-url')

    # Эта штука сама проверит, что ответ не 2xx, и начнёт орать
    response.raise_for_status() 

except requests.exceptions.HTTPError as err:
    print(f"HTTP ошибка: {err}")
    print(f"Статус-код: {err.response.status_code}") # Вот тут и узнаешь, 404 это или 500, чтобы понять, кто из вас двоих идиот

# Пример, когда всё-таки повезло
response = requests.get('https://api.github.com')
if response.status_code == 200:
    print('nЗапрос к API GitHub успешен!') # И жить сразу становится проще, ёпта

Вот и вся магия. Главное — понимать, на чьей стороне пиздец: на твоей (4xx) или на стороне того, кого ты доебался своими запросами (5xx). А 2xx — это как «Муму» живая и невредимая, все довольны.