Протокол HTTP: основы

HTTP (HyperText Transfer Protocol) — протокол прикладного уровня для передачи данных в сети, основа коммуникации в вебе.

Зачем нужно

HTTP — это язык, на котором браузер разговаривает с сервером. Без понимания структуры запросов и ответов, кодов статусов и заголовков невозможно отлаживать API, настраивать кэширование, понять CORS или реализовать аутентификацию.

Где используется

  • Все браузерные запросы (страницы, API, изображения)
  • REST API, GraphQL, gRPC-Web
  • DevTools → вкладка Network — наблюдение за HTTP в реальном времени
  • curl, Postman, fetch — инструменты отправки HTTP-запросов

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

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbG...
Accept: application/json

{"name": "Антон", "email": "anton@example.com"}

|___________|   |_________|
 Стартовая       Заголовки
 строка

|___________________________________|
            Тело запроса

Структура HTTP-ответа

HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/users/42
Cache-Control: no-cache

{"id": 42, "name": "Антон", "email": "anton@example.com"}

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

1xx — Информационные
  100 Continue

2xx — Успех
  200 OK           — стандартный успешный ответ
  201 Created      — ресурс создан (POST)
  204 No Content   — успех без тела (DELETE)

3xx — Перенаправление
  301 Moved Permanently — постоянный редирект
  302 Found             — временный редирект
  304 Not Modified      — кэш актуален (If-None-Match)

4xx — Ошибки клиента
  400 Bad Request        — некорректные данные
  401 Unauthorized       — не авторизован (нужен токен)
  403 Forbidden          — авторизован, но нет прав
  404 Not Found          — ресурс не найден
  405 Method Not Allowed — метод не поддерживается
  422 Unprocessable      — ошибка валидации
  429 Too Many Requests  — превышен rate limit

5xx — Ошибки сервера
  500 Internal Server Error — ошибка на сервере
  502 Bad Gateway           — ошибка прокси/upstream
  503 Service Unavailable   — сервис недоступен
  504 Gateway Timeout       — таймаут upstream

HTTP-методы

GET    — получить ресурс (безопасный, идемпотентный, кэшируется)
POST   — создать ресурс (не идемпотентный)
PUT    — заменить ресурс целиком (идемпотентный)
PATCH  — частично обновить (обычно идемпотентный)
DELETE — удалить (идемпотентный)
HEAD   — GET без тела (проверка существования, размера)
OPTIONS— узнать поддерживаемые методы (CORS preflight)

Версии HTTP

HTTP/1.0  — одно соединение = один запрос
HTTP/1.1  — keep-alive, pipelining, chunked transfer
HTTP/2    — мультиплексирование, server push, бинарный протокол, header compression
HTTP/3    — QUIC/UDP вместо TCP, быстрое восстановление при потерях

curl — тестирование HTTP вручную

# GET
curl -i https://api.example.com/users

# POST с JSON
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer TOKEN" \
  -d '{"name":"Антон","email":"anton@example.com"}'

# Вывод только заголовков
curl -I https://example.com

# Следовать за редиректами
curl -L https://example.com

Частые ошибки

  • Путаница 401 и 403: 401 — нет/неверный токен, 403 — токен есть, но нет прав
  • 200 вместо 201 при создании ресурса — клиент не знает, что ресурс создан
  • 200 при ошибке с текстом ошибки в теле — инструменты не увидят проблему
  • Не используют HEAD для проверки существования ресурса — качают всё тело

Связанные темы

Ресурсы