Условие
Вася считает себя хакером. Он отправил хитрый запрос на сервер, но тот вернул ему ошибку, что он что-то сделал не так — то есть запрос был не корректным. К какой группе ошибок будет относиться то, что вернул сервер? Обмен производится по HTTP.
- 2**
- 3**
- 4**
- 5**
Решение
Правильный ответ — 4xx.
4xx — класс ошибок на стороне клиента: клиент сформулировал запрос некорректно или у него нет прав. Среди них:
| Код | Имя | Когда |
|---|---|---|
| 400 | Bad Request | Запрос синтаксически некорректный (битый JSON, плохие параметры) |
| 401 | Unauthorized | Нет/невалидный токен авторизации |
| 403 | Forbidden | Авторизован, но нет прав на ресурс |
| 404 | Not Found | Ресурса не существует |
| 405 | Method Not Allowed | Метод (PUT/DELETE) не поддерживается на этом эндпоинте |
| 409 | Conflict | Конфликт состояния (например, дубль уникального ключа) |
| 422 | Unprocessable Entity | Синтаксис ок, но семантика невалидна |
| 429 | Too Many Requests | Rate-limit |
Все классы
| Класс | Что значит | Примеры |
|---|---|---|
| 1xx | Информационные | 100 Continue, 101 Switching Protocols |
| 2xx | Успех | 200 OK, 201 Created, 204 No Content |
| 3xx | Перенаправление | 301 Moved, 302 Found, 304 Not Modified |
| 4xx | Ошибка клиента | 400, 401, 403, 404 |
| 5xx | Ошибка сервера | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
В контексте задачи
«Хакер отправил хитрый запрос» — то есть запрос некорректный по форме или содержанию. Это вина клиента (или попытка атаки). Сервер отвечает 4xx:
- 400 — если синтаксис кривой
- 403 — если попытка обойти авторизацию
- 422 — если данные не проходят валидацию
Подводные камни
- Считать
5xxошибкой клиента. Нет: 5xx означает, что сервер не смог обработать корректный запрос (например, из-за бага в коде или БД). Если сервер падает на «хитром» запросе — это ещё и сигнал о баге. - 404 vs 410. 404 — «не найдено» (ресурс может появиться). 410 Gone — «удалено навсегда».
- 401 vs 403. 401 — «не авторизован» (предъявите токен). 403 — «авторизован, но запрещено» (токен есть, прав нет).
200 OKс ошибкой в теле. Антипаттерн: некоторые API возвращают200с{"error": "..."}. Правильнее — соответствующий4xx/5xxкод.
Эталонный ответ
4xx — класс ошибок клиента. Конкретно для «некорректного запроса» — обычно 400 Bad Request.