Ответ
Коды состояния 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 — это как «Муму» живая и невредимая, все довольны.