Какие основные HTTP-статус коды вы знаете и что они означают?

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

Ответ

HTTP-статус коды указывают на результат обработки запроса сервером. Группируются по первой цифре.

1xx (Информационные): Запрос принят, обработка продолжается.

2xx (Успешные): Запрос успешно обработан.

  • 200 OK — стандартный ответ для успешных GET, POST, PUT или DELETE запросов.
  • 201 Created — запрос привел к созданию нового ресурса (часто после POST).
  • 204 No Content — сервер успешно обработал запрос, но не возвращает содержимого (например, после DELETE).

3xx (Перенаправления): Для завершения запроса требуется дополнительное действие (обычно — новый запрос).

  • 301 Moved Permanently — ресурс навсегда перемещен по новому URL.
  • 302 Found / 307 Temporary Redirect — ресурс временно доступен по другому адресу.
  • 304 Not Modified — используется для кеширования; контент не изменился с момента последнего запроса.

4xx (Ошибки клиента): Запрос содержит ошибку или не может быть выполнен.

  • 400 Bad Request — сервер не может обработать запрос из-за синтаксической ошибки (например, неверный JSON).
  • 401 Unauthorized — для доступа требуется аутентификация (логин/пароль).
  • 403 Forbidden — сервер понял запрос, но отказывается его авторизовать (прав недостаточно).
  • 404 Not Found — сервер не нашел запрашиваемый ресурс.
  • 429 Too Many Requests — клиент отправил слишком много запросов за короткое время (Rate Limiting).

5xx (Ошибки сервера): Сервер не смог выполнить корректный запрос.

  • 500 Internal Server Error — общая ошибка сервера без конкретных деталей.
  • 502 Bad Gateway — сервер, выступая в роли шлюза или прокси, получил недопустимый ответ от вышестоящего сервера.
  • 503 Service Unavailable — сервер временно не может обработать запрос (перегрузка, техобслуживание).
  • 504 Gateway Timeout — сервер-шлюз не дождался ответа от вышестоящего сервера.

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

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 'Location' in response.headers