Ответ
Коды состояния HTTP (Status Codes) стандартизированы RFC 9110 и сгруппированы по первой цифре (от 1xx до 5xx):
| Группа | Диапазон | Назначение | Примеры |
|---|---|---|---|
| 1xx — Информационные | 100-199 | Запрос принят, клиент может продолжать. | 100 Continue, 101 Switching Protocols |
| 2xx — Успешные | 200-299 | Запрос успешно обработан сервером. | 200 OK, 201 Created, 204 No Content |
| 3xx — Перенаправления | 300-399 | Для завершения запроса требуется дополнительное действие (часто — переход по новому URL). | 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 |
Практическое значение для тестирования:
- 2xx — ожидаемый результат для успешных операций.
- 4xx — указывают на проблему на стороне клиента (неправильные данные, отсутствие прав).
- 5xx — сигнализируют о внутренних сбоях сервера.
Пример проверки в автотесте (Python, requests):
import requests
# Тест на успешное создание ресурса
response = requests.post('https://api.example.com/users', json={"name": "Alice"})
assert response.status_code == 201, f"Expected 201, got {response.status_code}"
assert 'Location' in response.headers # Проверка заголовка с ссылкой на новый ресурс
# Тест на ошибку клиента (неверные данные)
response = requests.post('https://api.example.com/users', json={})
assert response.status_code == 400, f"Expected 400 for bad request, got {response.status_code}" Ответ 18+ 🔞
Э, слушай, ну это ж классика, протоколы, блядь! HTTP статусы — это как язык, на котором сервер с клиентом переругиваются. Сука, если бы они матерились, то звучало бы примерно так.
Смотри, вся эта хуйня стандартизирована документом под названием RFC 9110. И вся соль в первой цифре кода, вот в этой, блядь, циферке. От неё всё и пляшет.
| Группа | Диапазон | Что означает, если по-простому | Примеры, чтоб ты запомнил |
|---|---|---|---|
| 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 (Я сейчас не в состоянии, занят, перезвони позже) |
А теперь, блядь, зачем это всё тестировщику?
- 2xx — это то, ради чего всё затевалось. Ожидаемый, ебать, результат. Если не 2xx — ищи, где накосячил.
- 4xx — это тебе, клиент, сигнал: «Э, дружок-пирожок, посмотри-ка на свой запрос, там пиздец!». Ошибка в твоих данных или правах.
- 5xx — вот тут уже волнение, ебать. Это сервер кричит «Караул!». Внутренние проблемы, пошли все по пизде. Надо бить тревогу.
Ну и как это в коде выглядит, чтоб ты понимал (Python, requests):
import requests
# Тест, когда всё должно быть заебись
response = requests.post('https://api.example.com/users', json={"name": "Alice"})
assert response.status_code == 201, f"Expected 201, got {response.status_code}"
assert 'Location' in response.headers # Проверяем, дал ли он нам ссылку на новосозданную сущность
# Тест, когда клиент (то есть мы в тесте) отправляет хуйню
response = requests.post('https://api.example.com/users', json={})
assert response.status_code == 400, f"Expected 400 for bad request, got {response.status_code}"
Вот и вся магия. Сервер либо кивает, либо посылает, либо признаётся, что сам — манда с ушами. Главное — различать, кто в конкретный момент манда.