Граф знанийНастройки

Обновлено: 23 июня 2026 г. в 08:31

Протокол HTTP

средний

Модель запрос-ответ, структура HTTP-сообщения, эволюция HTTP/1.1, HTTP/2 и HTTP/3 и влияние сети на поведение веб-запросов.

Глава про HTTP полезна тем, что показывает эволюцию веб-протокола как историю компромиссов между простотой, кэшированием, стоимостью соединений и поведением под нагрузкой.

В реальной работе это помогает выбирать между HTTP/1.1, HTTP/2 и HTTP/3 по профилю трафика, учитывать идемпотентность и семантику кэширования и не путать уровень API с уровнем транспорта.

В интервью и архитектурных обсуждениях материал даёт структурный язык для разговора о производительности веб-систем и протокольных компромиссах, а не только об API-ручках.

Практическая польза главы

Протокол и продукт

Связывает свойства HTTP с UX-метриками: задержкой, повторными запросами, кэшем и устойчивостью API.

Версионно-ориентированный дизайн

Учит выбирать HTTP/1.1, HTTP/2, HTTP/3 по профилю трафика и сетевым ограничениям.

Тактики производительности

Помогает осознанно применять постоянные соединения, сжатие, кэширование и мультиплексирование.

Аргументация на интервью

Даёт структурный ответ на вопросы о протокольных оптимизациях веб-систем.

RFC

RFC 9110 (HTTP Semantics)

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

Перейти на сайт

Протокол HTTP — это не просто язык веба, а договор о том, как клиент просит данные и в какой форме сервис отвечает. Выбор версии, правила кэширования и политика повторов решают, какой получится задержка, выдержит ли система пик нагрузки и во что обойдётся каждый запрос.

В системном дизайне — это базовая форма между клиентом и сервисом. По своей природе он , поэтому устойчивость приходится собирать снаружи: из кэша, токенов, баз данных и прикладной логики.

Поведение конкретного запроса определяют , , , и выбранная стратегия и . Именно отсюда берутся итоговые , и реальная стоимость обработки.

Под ростом трафика на сцену быстро выходят , доля ответов из кэша () и . Параллельно путь запроса обычно проходит через , или — поэтому выбор между версиями протокола HTTP/1.1, HTTP/2 и HTTP/3 в реальности оказывается выбором под конкретную сеть и профиль нагрузки.

Дальше глава связывает поведение протокола HTTP с , , , , , и целевыми показателями .

Ключевые свойства протокола HTTP

Клиент-серверное взаимодействие

Клиент отправляет запрос по протоколу HTTP, а сервер возвращает код статуса, заголовки и при необходимости тело — асимметричная схема, где инициатива всегда у клиента.

Работа без сохранения состояния

Сам протокол не помнит предыдущий запрос — состояние приходится собирать снаружи: в кэше, базе данных, токенах и сессиях. Это удобно для горизонтального масштабирования и неудобно, если про это забыть.

Управление заголовками

Через заголовки идут кэширование, тип содержимого, авторизация и политики безопасности. Большая часть тонкостей поведения протокола живёт именно здесь, а не в теле.

Промежуточные звенья

Между клиентом и сервисом обычно стоят прокси, сети доставки контента и шлюзы API. Они снимают часть нагрузки и задержки, но добавляют свой слой правил, кэша и сбоев.

Эволюция версий

Прикладная семантика у версий протокола HTTP (HTTP/1.1, HTTP/2 и HTTP/3) одна и та же, но под нагрузкой они ведут себя по-разному — от профиля соединений до устойчивости к потерям.

Как устроено сообщение протокола HTTP

Какая бы версия ни использовалась, сообщение протокола HTTP сохраняет одну и ту же форму: строка запроса или статуса, заголовки, пустая строка и тело, если оно вообще нужно. Эта форма и есть та точка, где договариваются клиент и сервис.

Запрос по протоколу HTTP

Строка запроса

METHOD /path версия протокола HTTP

Заголовки

Host, авторизация (Authorization), Content-Type, заголовок Cache-Control...

Пустая строка

Разделяет заголовки и тело

Тело (необязательно)

JSON, HTML или двоичные данные

Ответ по протоколу HTTP

Строка статуса

версия протокола HTTP, код статуса и причина

Заголовки

Content-Type, заголовок Cache-Control, идентификатор версии ресурса ETag, Set-Cookie...

Пустая строка

Разделяет заголовки и тело

Тело (необязательно)

Ответ API, HTML-страница, файл или поток данных

Жизненный цикл запроса по протоколу HTTP

Подготовка запроса

Прежде чем уйти в сеть, клиент разрешает имя через систему доменных имён (DNS), выбирает конечную точку и собирает метод, путь, заголовки и при необходимости тело. От этой подготовки зависят и первая задержка, и попадание в нужный сервис.

Прохождение по пути

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

Ответ и повторное использование соединения

Клиент получает код статуса и данные, применяет правила кэширования и по возможности переиспользует уже открытое соединение — холодные рукопожатия дороги, и хороший клиент их избегает.

Как выглядит обмен по протоколу HTTP

Эта схема повторяется в REST API, на пограничных шлюзах и почти в любой синхронной интеграции — везде, где клиент ждёт понятный ответ на конкретный запрос.

Запрос ↔ ответ в HTTP

Протокол HTTP строится вокруг понятной пары: запрос от клиента и ответ от сервера.

Структура сообщения

  • Метод (GET, POST, PUT)
  • URI или путь ресурса
  • Заголовки
  • Тело запроса (необязательно)
КлиентСервер
Клиент
REQ
Сервер
Клиент отправляет запрос без сохранения состояния на уровне протокола.

Как HTTP ведёт себя под нагрузкой

Пошагово видно, как доля ответов из кэша, уровень ошибок и p95 меняются при росте трафика.

ШагИнтервал 1 (1 из 6)
Задержка p95 (мс)Доля ошибок (%)Ответы из кэша (%)

Фаза

Ровная нагрузка

Нагрузка

2.4k RPS

Задержка p95

85 ms

Доля ошибок

0.2%

Ответы из кэша

76.0%

Повторное использование соединений

92.0%

Что помогает: Переиспользование соединений

Что происходит: Кэш и уже открытые соединения удерживают задержку на низком и предсказуемом уровне.

Пояснения к обозначениям

  • RPS (requests per second) — число HTTP-запросов в секунду.
  • p95 — время ответа, ниже которого укладываются 95% запросов.

Что означают метрики

  • Повторное использование соединений — доля запросов, отправленных по уже открытому соединению.
  • Ответы из кэша — доля запросов, которые обошлись без медленных обращений к сервису и его зависимостям.

Связанная глава

Балансировка трафика

Трафик протокола HTTP редко идёт напрямую: между клиентом и сервисом почти всегда стоят балансировщики L7/L4 и слой правил маршрутизации и доступа.

Открыть главу

Как сеть и маршрутизация влияют на протокол HTTP

Повторное использование соединений

Холодные соединения и лишние рукопожатия поднимают p95 и 99-й перцентиль (p99) даже тогда, когда само приложение работает быстро. На графиках это часто выглядит как загадочные хвосты задержки без видимой причины.

Доля ответов из кэша

Падение доли попаданий в кэш мгновенно перекладывает трафик на зависимости — задержка для пользователя ухудшается раньше, чем срабатывают алёрты на бэкендах.

Политика ожидания и повторов

Слишком агрессивные таймауты и повторы умеют сами создать перегрузку: один сбой зависимости расходится по графу вызовов и превращается в полноценный инцидент.

Балансировка на L4 и L7

Балансировщик меняет профиль задержек, форму пути запроса и поведение клиентских потоков. Особенно заметно это, когда нужен липкий маршрут или маршрутизация по содержимому.

Максимальный размер блока передачи (MTU), потери и версия протокола

Потери пакетов и нестабильная сеть по-разному бьют по версиям протокола HTTP — на HTTP/2 и HTTP/3 разница хорошо видна в мобильных сценариях и на дальних маршрутах.

Источник

Evolution of HTTP (MDN)

Ключевые вехи протокола HTTP — версии 1.1, 2 и 3 — и инженерные компромиссы, на которых стоит каждая.

Перейти на сайт

Эволюция протокола HTTP

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

HTTP/1.1

1997/1999

Текстовый протокол поверх TCP

Связь с OSI: Прикладной уровень поверх протокола TCP.

  • Постоянные соединения и передача данных по частям
  • Блокировка в начале очереди внутри одного соединения протокола TCP
  • Часто приходится держать несколько соединений с одним хостом

HTTP/2

2015

Двоичное фреймирование и мультиплексирование

Связь с OSI: Та же прикладная семантика, но более эффективная передача поверх протокола TCP.

  • Несколько потоков внутри одного соединения
  • Сжатие заголовков с помощью HPACK
  • Меньше накладных расходов на установку соединений

HTTP/3

2022

HTTP поверх протокола QUIC (UDP)

Связь с OSI: Та же прикладная семантика поверх протокола QUIC, где потери меньше блокируют соседние потоки.

  • Быстрее устанавливает соединение и восстанавливается после потерь
  • Снижает влияние блокировки в начале очереди на транспортном уровне
  • Лучше ведёт себя в мобильных и нестабильных сетях

Где протокол HTTP особенно важен

  • Публичные и внутренние API, включая REST и браузерные прокси к gRPC
  • Веб-приложения, одностраничные приложения (SPA) и фронтенды с серверным рендерингом (SSR)
  • Слои бэкенда для фронтенда (BFF) и шлюзы API, которые собирают ответы из нескольких сервисов
  • Синхронные межсервисные вызовы, где важна предсказуемая схема запрос-ответ
  • Пограничные слои доступа: авторизация, ограничение частоты запросов и наблюдаемость

Почему это важно для системного дизайна

  • Протокол HTTP задаёт API-контракты — а вместе с ними и задержку, поведение повторов и стоимость обработки запросов.
  • Версия меняет профиль нагрузки: число и характер соединений, мультиплексирование, устойчивость к потерям.
  • Аккуратная стратегия кэша, таймаутов и повторов сужает радиус поражения инцидента и оберегает зависимости от лавины запросов.
  • Метрики протокола HTTP обычно загораются раньше всего — это самый ранний сигнал того, что у пользователя что-то идёт не так.

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

Считать протокол HTTP почти бесплатным и не закладывать в расчёт ёмкости стоимость соединений, кэша и повторов — на пике именно это и съедает запас.

Назначать одинаковые таймауты и повторы для всех методов и конечных точек, не разделяя их по соглашению об уровне сервиса (SLA), идемпотентности и критичности операции.

Пропускать семантику кэша через идентификатор версии ресурса ETag и заголовок Cache-Control — и тем самым раз за разом перегружать сервисы запросами, которые могли бы не уходить дальше клиента.

Складывать клиентские ошибки 4xx и серверные 5xx в одну метрику: при таком взгляде самый ранний сигнал деградации со стороны сервиса теряется в шуме.

Связанные главы

  • Модель OSI - помогает увидеть, где живёт протокол HTTP на прикладном уровне и как он связан с транспортом и сетью.
  • IPv4 и IPv6: эволюция IP-адресации - объясняет, как адресация и маршрутизация формируют путь трафика протокола HTTP и его задержки.
  • Протокол TCP - разбирает основной транспорт под версиями протокола HTTP/1.1 и HTTP/2 — и заодно источник большей части задержек запроса.
  • Протокол UDP - показывает транспортную основу под протокол QUIC и HTTP/3, где задержка и потери выходят на первый план.
  • Система доменных имен (DNS) - напоминает, что любой запрос по протоколу HTTP начинается с разрешения имени и держится на качестве работы системы доменных имён (DNS).
  • Протокол WebSocket - показывает, как через механизм Upgrade в протоколе HTTP обмен запрос-ответ превращается в постоянный двусторонний канал.
  • Балансировка трафика - разбирает маршрутизацию на L7, липкие сессии и то, как балансировщик меняет поведение протокола HTTP.
  • Подходы к удалённым вызовам - помогает сравнить прикладные протоколы и подобрать политику таймаутов и повторов на границах сервисов.
  • Зачем нужны распределённые системы и консистентность - переводит разговор от механики протокола HTTP к компромиссам, без которых распределённая архитектура не собирается.

Чтобы отмечать прохождение, включи трекинг в Настройки