Протокол 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для проверки существования ресурса — качают всё тело
Связанные темы
- _MOC Сеть
- HTTP-методы -- GET, POST, PUT, DELETE, PATCH
- Как работает веб -- DNS, IP, домены
- REST API
- Тело запроса и ответа
- Content-Type -- типы данных