Какие основные клиентские HTTP-коды ошибок (4xx) вы знаете?

Ответ

Коды состояния HTTP 4xx указывают на ошибки, вызванные клиентом (неправильный запрос). Основные из них:

Код Название Причина и контекст
400 Bad Request Сервер не может обработать запрос из-за неверного синтаксиса (например, невалидный JSON, отсутствие обязательного поля).
401 Unauthorized Требуется аутентификация, но она не предоставлена или не прошла (часто связан с заголовком WWW-Authenticate).
403 Forbidden Сервер понял запрос, но отказывается его авторизовать. У клиента нет прав доступа к ресурсу.
404 Not Found Сервер не может найти запрошенный ресурс (неверный URL).
405 Method Not Allowed Метод HTTP (GET, POST и т.д.) не поддерживается для данного URL.
408 Request Timeout Сервер не получил полный запрос в отведенное время.
429 Too Many Requests Клиент отправил слишком много запросов за короткое время (ограничение скорости, rate limiting).

Пример проверки ошибки 400 в автотесте (Python, requests):

import requests

def test_create_user_with_invalid_email():
    url = "https://api.example.com/users"
    # Отправляем запрос с заведомо невалидным email
    payload = {"email": "not-an-email", "name": "Test"}
    response = requests.post(url, json=payload)

    # Проверяем, что сервер корректно отвечает ошибкой клиента
    assert response.status_code == 400
    # Проверяем структуру ответа об ошибке
    error_data = response.json()
    assert "error" in error_data
    assert "email" in error_data["error"].lower()

Ответ 18+ 🔞

А, ну вот, смотри, опять эти клиенты накосячили, блядь! HTTP 4xx — это как раз про них, про этих распиздяев, которые запросы кривые шлют. Сервер тут нихуя не виноват, он просто в ахуе с того, что ему приносят.

Вот табличка, чтобы не ебать мозг:

Код Название Что за пиздец?
400 Bad Request Сервер получил какую-то хуйню вместо нормального запроса. Типа JSON сломался или поле обязательное забыли. Говорит: «Сам-то понял, что отправил, мудак?»
401 Unauthorized «А ты кто такой, сука?» Требует логин-пароль или токен, а ты нихуя не предоставил, либо предоставил такое, что хоть святых выноси.
403 Forbidden «Я-то тебя понял, но иди нахуй». Права есть? Нет. Доступа нет. Всё, пиздуй отсюда.
404 Not Found Классика, ёпта! «Тут ничего нет, блядь». Искал страницу, API эндпоинт — а его нихуя. Может, опечатался, а может, его и не было никогда.
405 Method Not Allowed «Ты че, охренел?» Хочешь POST-ом удалить, а можно только DELETE. Или GET-ом создать что-то. Не, так не работает.
408 Request Timeout Сервер ждал-ждал, пока ты свой запрос соберёшь, да заебался. «Та ну тебя нахуй, я пошёл».
429 Too Many Requests О, это моё любимое! «Успокойся, блядь!» Слишком много запросов за раз отправил. Сервер тебя rate limit-ом по ебалу накрыл, жди теперь.

Вот, смотри, как в автотесте на 400 ошибку проверить (Python, requests):

import requests

def test_create_user_with_invalid_email():
    url = "https://api.example.com/users"
    # Шлём на сервер откровенную хуйню вместо email
    payload = {"email": "not-an-email", "name": "Test"}
    response = requests.post(url, json=payload)

    # Проверяем, что сервер не обосрался, а культурно послал нас с нашей же хернёй
    assert response.status_code == 400
    # Заодно глянем, что он там внятного сказал
    error_data = response.json()
    assert "error" in error_data
    assert "email" in error_data["error"].lower()

Вот и вся магия, блядь. Клиент — всегда мудак, пока не доказано обратное.