Протокол передачи гипертекста (Hypertext Transfer Protocol – HTTP) – это протокол, который определяет, как клиент и сервер общаются и обмениваются данными через Интернет. Он является основным протоколом для передачи данных веб-страниц, изображений, видео, аудио, API и других ресурсов между клиентскими приложениями (web-браузерами) и веб-серверами.
Клиент (браузер, мобильное приложение, IoT-устройство) инициирует соединение и отправляет запрос.
Сервер (веб-сервер, API-шлюз) принимает запрос, обрабатывает его и возвращает ответ.
HTTP не хранит информацию о предыдущих запросах (протокол stateless), что упрощает масштабирование, но требует дополнительных механизмов для поддержки сеансов (cookies, токены).
В современных архитектурах HTTP используется не только для передачи HTML-страниц, но и как универсальный транспорт для RESTful API, GraphQL, микросервисов и даже потокового видео (HLS, DASH).
Транспортные протоколы: TCP, SCTP и эволюция к QUIC
TCP (порт 80) – гарантирует доставку, порядок пакетов и контроль перегрузки. HTTP/1.x и HTTP/2 работают поверх TCP.
SCTP – менее распространён, используется в телеком-сетях (например, SIGTRAN). HTTP/2 теоретически может поверх SCTP, но на практике почти не встречается.
QUIC – протокол поверх UDP, лежащий в основе HTTP/3. Устраняет проблему «блокировки заголовком» (head-of-line blocking), обеспечивает нулевые задержки при пересоединении и встроенное шифрование.
Порт 80 (безопасный аналог – порт 443 для HTTPS) является стандартным, но может быть изменён на любой другой (например, :8080 для тестовых серверов).
Структура HTTP-запроса и его методы
Базовый синтаксис запроса (пример):
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Методы развёрнуто:
GET – получение ресурса (без изменения на сервере). Идемпотентен.
HEAD – как GET, но без тела ответа (только заголовки). Для проверки наличия ресурса.
POST – отправка данных на сервер (создание нового ресурса). Не идемпотентен.
PUT – полная замена ресурса по указанному URL. Идемпотентен.
PATCH – частичное изменение ресурса.
DELETE – удаление ресурса.
OPTIONS – запрос поддерживаемых методов для URL.
TRACE / CONNECT – используются для диагностики и проксирования туннелей (например, для HTTPS через прокси).
В RESTful API методы строго соответствуют CRUD-операциям: GET (Read), POST (Create), PUT/PATCH (Update), DELETE (Delete).
HTTP-ответы и коды состояния – полная классификация
Сервер отвечает строкой состояния, например: HTTP/1.1 200 OK.
Коды делятся на 5 классов:
Диапазон
Категория
Примеры
1xx
Информационные
100 Continue (клиент может продолжить запрос)
2xx
Успех
200 OK, 201 Created, 204 No Content
3xx
Перенаправление
301 Moved Permanently, 302 Found, 304 Not Modified (кеш)
4xx
Ошибка клиента
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests
5xx
Ошибка сервера
500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable
Коды расширяются: например, 418 I’m a teapot (шутка из RFC 2324), 451 Unavailable For Legal Reasons.
Заголовки HTTP: управление кэшем, сеансами, аутентификацией
Заголовки – это пары «ключ: значение» в запросе и ответе.
Управление кэшированием
Cache-Control: max-age=3600 – ресурс свеж 1 час.
ETag и If-None-Match – условные запросы для проверки изменений.
Last-Modified и If-Modified-Since – временная версия кэша.
Конвейеризация в HTTP/1.1 была слабо реализована (требует ответов в порядке запросов), мультиплексирование HTTP/2 решает эту проблему. Серверный push в HTTP/2 оказался сложен в использовании (устарел в пользу103 Early Hints и preload).
Практическое значение для разработчиков и администраторов
Инженеров по безопасности – проверять заголовки безопасности (Content-Security-Policy, X-Frame-Options), отслеживать атаки (HTTP smuggling, CRLF injection).
Архитекторов API – проектировать RESTful или GraphQL API с учётом идемпотентности, пагинации, версионирования (через заголовки Accept или URL).
Инструменты для анализа HTTP-трафика: curl, браузерные DevTools (вкладка Network), Wireshark, Fiddler, Postman, httpie, wget.