HTTP-заголовки, коды ответов (200, 404, 500 и т. д.)

HTTP-заголовки и коды ответов

Введение

Когда браузер или Postman отправляет запрос на сервер — вместе с запросом летит куча служебной информации. Эта информация передаётся в заголовках (headers). Сервер отвечает тоже с заголовками плюс кодом состояния (status code), который говорит: «всё ок», «ресурс не найден», «у тебя нет прав» и т. д.

Как тестировщик, ты будешь смотреть и на заголовки, и на код ответа в каждом тесте API.


HTTP-заголовки

Заголовок — это пара ключ: значение, которая передаётся вместе с HTTP-запросом или ответом.

Заголовки запроса (Request Headers)

ЗаголовокПример значенияЧто означает
Content-Typeapplication/jsonФормат тела запроса
AuthorizationBearer eyJhbGci...Токен авторизации
Acceptapplication/jsonКакой формат ответа ожидает клиент
User-AgentMozilla/5.0 ...Какой клиент делает запрос

Заголовки ответа (Response Headers)

ЗаголовокПример значенияЧто означает
Content-Typeapplication/json; charset=utf-8Формат тела ответа
Cache-Controlno-cacheКак кешировать ответ
Set-CookiesessionId=abc123; HttpOnlyУстанавливает cookie в браузере
Location/users/42Куда перенаправить (при редиректах)

Пример запроса с заголовками:

POST /api/login HTTP/1.1
Content-Type: application/json
Accept: application/json

{"email": "user@test.com", "password": "secret"}

Коды состояния HTTP

Код состояния — трёхзначное число в ответе сервера. Первая цифра указывает группу.

2xx — Успех

КодНазваниеКогда используется
200OKСтандартный успешный ответ
201CreatedРесурс успешно создан (POST)
204No ContentУспешно, но тела ответа нет (DELETE)

3xx — Перенаправление

КодНазваниеКогда используется
301Moved PermanentlyURL изменился навсегда
302FoundВременное перенаправление

4xx — Ошибка клиента

КодНазваниеКогда используется
400Bad RequestНекорректный запрос (плохой JSON, невалидные данные)
401UnauthorizedНе авторизован (нет или неверный токен)
403ForbiddenАвторизован, но нет прав
404Not FoundРесурс не найден
405Method Not AllowedМетод не поддерживается этим endpoint'ом
409ConflictКонфликт (например, email уже занят)
422Unprocessable EntityДанные правильного формата, но семантически неверны
429Too Many RequestsПревышен лимит запросов (rate limiting)

5xx — Ошибка сервера

КодНазваниеКогда используется
500Internal Server ErrorНеобработанная ошибка на сервере
502Bad GatewayПрокси получил неверный ответ от upstream
503Service UnavailableСервер перегружен или на обслуживании
504Gateway TimeoutUpstream не ответил вовремя

Частые ошибки тестировщиков

  • Проверять только статус-код, игнорируя тело ответа. Сервер может вернуть 200, но в теле написать {"error": "Not found"} — это тоже баг.
  • Игнорировать заголовки ответа. Например, забытый Set-Cookie может означать, что сессия не создаётся.
  • Не проверять 5xx. Если при тестировании появился 500 — это всегда баг, даже если UI "нормально" обработал ситуацию.
  • Путать 401 и 403. 401 — «я не знаю кто ты», 403 — «я знаю кто ты, но ты не можешь это делать».

Что мы запомним

  • Заголовки передают служебную информацию вместе с запросом и ответом.
  • Content-Type и Authorization — самые важные заголовки запроса.
  • 2xx — успех, 3xx — редиректы, 4xx — ошибка клиента, 5xx — ошибка сервера.
  • Всегда проверяй и статус-код, и тело ответа — они оба важны.
  • 401 ≠ 403: первый про отсутствие аутентификации, второй — про отсутствие прав.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике