Основы HTTP-протокола: запросы и ответы, методы

Основы HTTP-протокола: запросы, ответы, методы

Введение

HTTP — это язык, на котором общаются клиент и сервер в интернете. Каждый раз, когда ты открываешь страницу или приложение делает запрос к серверу — это HTTP. Для тестировщика знание HTTP — фундамент: без него невозможно читать логи, работать с DevTools или тестировать API.


HTTP-запрос: из чего состоит

Структура HTTP-запроса и ответа

Каждый HTTP-запрос содержит:

POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer abc123

{
  "email": "user@example.com",
  "password": "secret"
}
  • Метод (POST) — что мы хотим сделать
  • URL (/api/login) — к какому ресурсу обращаемся
  • Заголовки (Headers) — мета-информация: тип контента, авторизация и т.д.
  • Тело (Body) — данные запроса (не у всех методов)

HTTP-ответ: из чего состоит

HTTP/1.1 200 OK
Content-Type: application/json

{
  "token": "eyJhbGci...",
  "user": { "id": 1, "email": "user@example.com" }
}
  • Статус-код (200 OK) — результат обработки запроса
  • Заголовки — мета-информация об ответе
  • Тело — данные ответа (обычно JSON)

HTTP-методы

HTTP-методы: GET, POST, PUT, PATCH, DELETE

МетодНазначениеЕсть тело?Идемпотентный?
GETПолучить данныеНетДа
POSTСоздать новый ресурсДаНет
PUTПолностью обновить ресурсДаДа
PATCHЧастично обновить ресурсДаНет
DELETEУдалить ресурсНет/редкоДа

Идемпотентный — повторный вызов даёт тот же результат. GET один раз и GET десять раз = одинаковый результат. POST создаст 10 записей вместо одной.


Коды статусов: что они означают

Карта HTTP-статус кодов: 2xx, 3xx, 4xx, 5xx

2xx — Успех ✓

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

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

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

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

КодНазваниеКогда используется
400Bad RequestНекорректный запрос (неверный формат, поля)
401UnauthorizedНе авторизован (нет/неверный токен)
403ForbiddenНет прав (токен есть, но доступ запрещён)
404Not FoundРесурс не найден
422Unprocessable EntityДанные формально верны, но логически некорректны

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

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

Важное различие: 401 vs 403

401 vs 403: не аутентифицирован vs нет прав

  • 401 Unauthorized — "Кто ты? Представься." (токен отсутствует или недействителен)
  • 403 Forbidden — "Я знаю, кто ты, но тебе сюда нельзя." (прав недостаточно)

Пример: Обычный пользователь пытается зайти в раздел администратора:

  • Если не залогинен → 401
  • Если залогинен, но не администратор → 403

Типичные ошибки в понимании

  • "404 — сервер не работает" — нет, сервер работает, просто ресурс не найден
  • "POST и GET — одно и то же, просто разные слова" — принципиально разные: GET читает, POST создаёт
  • "5xx — моя вина" — нет, 5xx всегда ошибка на стороне сервера
  • "200 = всё хорошо" — не всегда. 200 с телом {"error": "not found"} — тоже встречается (антипаттерн)

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

  • HTTP-запрос = метод + URL + заголовки + (опционально) тело
  • HTTP-ответ = статус-код + заголовки + тело
  • Методы: GET (читать), POST (создать), PUT/PATCH (обновить), DELETE (удалить)
  • 2xx = успех, 4xx = ошибка клиента, 5xx = ошибка сервера
  • 401 = не авторизован, 403 = нет прав, 404 = не найден
  • Коды статусов — первая вещь, которую смотришь при анализе проблемы

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

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

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