Какие основные классы HTTP-кодов состояния (Status Codes)?

Ответ

HTTP-коды состояния сгруппированы в пять классов, определяемых первой цифрой кода:

Класс Диапазон Назначение Ключевые примеры
1xx 100-199 Информационные. Запрос принят, процесс продолжается. 100 Continue, 101 Switching Protocols
2xx 200-299 Успех. Запрос успешно получен, понят и обработан. 200 OK, 201 Created, 204 No Content
3xx 300-399 Перенаправление. Для завершения запроса требуются дальнейшие действия. 301 Moved Permanently, 302 Found, 304 Not Modified
4xx 400-499 Ошибка клиента. Запрос содержит синтаксическую ошибку или не может быть выполнен. 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xx 500-599 Ошибка сервера. Сервер не смог выполнить корректный запрос. 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

Пример проверки в автотесте (Python):

import requests
response = requests.post('https://api.example.com/users', json={'name': 'John'})
# Ожидаем успешное создание ресурса
assert response.status_code == 201, f'Expected 201, got {response.status_code}'
# Также можно проверить по классу кода:
assert response.status_code // 100 == 2, 'Response was not successful (2xx)'

Ответ 18+ 🔞

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

Смотри, их, сука, на пять семейств поделили, как мафию. Смотри на первую циферку — она всё решает.

Класс Диапазон Что означает, ёпта Самые попсовые коды
1xx 100-199 Информашка. Сервер такой: "Чувак, я твой запрос услышал, не выёбывайся, жди". Это как "принял, понял" по рации. 100 Продолжай (Continue), 101 Меняю протоколы (Switching Protocols)
2xx 200-299 Успех нахуй! Всё прошло гладко, как по маслу. Запрос пришёл, сервер его понял, обработал и отправил тебе плюшку. Идеальный мир. 200 ОК (всё заебись), 201 Создано (Created), 204 Контента нет (No Content) — типа сделал, но хвастаться нечем.
3xx 300-399 Перенаправление, блядь. Сервер такой хитрожопый: "Не здесь, иди нахуй, в другое место". Или "У тебя и так всё есть, бери из кэша". 301 Переехал навсегда (Moved Permanently), 302 Найден (Found, временный переезд), 304 Не менялось (Not Modified) — зачем грузить, если и так норм?
4xx 400-499 Клиент обосрался. Это твои косяки, дружок. Либо запрос кривой, либо прав нет, либо страницу нахуй удалили. Сервер в белом пальто и с чистой совестью. 400 Плохой запрос (Bad Request) — отправил хуйню, 401 Не авторизован (Unauthorized), 403 Запрещено (Forbidden) — не пущають!, 404 Не найдено (Not Found) — классика жанра, пиздец.
5xx 500-599 Сервер обосрался. А вот это уже не твоя вина, а ихняя. Сервер сломался, завис, не может достучаться до базы — в общем, полный пиздец на их стороне. 500 Внутренняя ошибка сервера (Internal Server Error), 502 Плохой шлюз (Bad Gateway), 503 Сервис недоступен (Service Unavailable) — все ушли в отпуск.

Ну и как это в тестах проверить, чтобы не быть мудаком:

import requests
response = requests.post('https://api.example.com/users', json={'name': 'John'})
# Ожидаем, что юзер создался — код 201
assert response.status_code == 201, f'Ожидал 201, а получил {response.status_code} — опять эти пидарасы накосячили!'
# А можно умнее — проверить, что код вообще из семейства успешных (2xx)
assert response.status_code // 100 == 2, 'Ответ был не успешным (не 2xx), ёбаный насос!'

Вот и вся магия, блядь. Запомни: 2xx — ты молодец, 4xx — ты мудак, 5xx — мудаки они.