В чем разница между успешным и неуспешным HTTP-запросом?

«В чем разница между успешным и неуспешным HTTP-запросом?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Различие определяется кодом состояния HTTP (Status Code) и способом обработки результата.

Успешный запрос (2xx):

  • Возвращает код 2xx (например, 200 OK, 201 Created).
  • Сервер успешно обработал запрос и возвращает ожидаемые данные или подтверждение.
  • Пример (GET-запрос):

    GET /api/users/1 HTTP/1.1
    Host: example.com
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {"id": 1, "name": "John"}

Неуспешный запрос (4xx/5xx):

  • Клиентская ошибка (4xx): Проблема на стороне запроса (неверные данные, отсутствие прав, не найден ресурс). Примеры: 400 Bad Request, 404 Not Found, 403 Forbidden.
  • Серверная ошибка (5xx): Сбой на стороне сервера. Примеры: 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable.
  • Пример (ошибка 404):

    GET /api/users/999 HTTP/1.1
    Host: example.com
    
    HTTP/1.1 404 Not Found
    Content-Type: application/json
    
    {"error": "User not found"}

Практическое значение: Клиентский код (frontend, другой сервис) обязан проверять код ответа. Успешные коды обрабатывают бизнес-логику, а неуспешные требуют механизма обработки ошибок (повтор, логирование, показ сообщения пользователю).