Версии протокола HTTP
HTTP (HyperText Transfer Protocol) — прикладной протокол передачи данных, лежащий в основе веба. За три десятилетия он прошёл путь от однострочного текстового запроса до бинарного протокола поверх UDP.
HTTP/0.9 (1991)
Самая первая версия — скорее прототип, чем полноценный протокол.
Возможности:
- Только метод
GET - Нет заголовков
- Нет кодов состояния
- Ответ — чистый HTML-текст
- После ответа соединение немедленно закрывается
HTTP/1.0 (1996) · RFC 1945
Первый стандартизированный вариант с реальной функциональностью.
Нововведения:
- Методы
GET,POST,HEAD - HTTP-заголовки (Content-Type, Content-Length и др.)
- Коды состояния (200, 404, 500…)
- Версия протокола в строке запроса
- Базовое кэширование через
Expires
Ограничения:
- Каждый запрос = отдельное TCP-соединение
- Нет поддержки виртуального хостинга
- Нет постоянных соединений
HTTP/1.1 (1997) · RFC 9112
Самый долгоживущий стандарт — до сих пор широко используется.
Ключевые нововведения:
- Keep-Alive — постоянное соединение, несколько запросов по одному TCP
- Обязательный заголовок
Host— открыл виртуальный хостинг - Chunked Transfer Encoding — передача данных блоками без указания длины заранее
- Методы:
PUT,DELETE,OPTIONS,CONNECT,TRACE(PATCHдобавлен позже — RFC 5789, 2010) - Кэширование:
Cache-Control,ETag,Last-Modified - Pipelining — возможность отправлять несколько запросов без ожидания ответа
Проблемы:
- Head-of-Line (HOL) blocking — медленный запрос блокирует очередь
- Браузеры открывали до 6 параллельных соединений на домен как обходной путь
- Заголовки передаются в текстовом виде и не сжимаются
HTTP/2 (2015) · RFC 9113
Революция в транспортном слое. Семантика та же, способ передачи — другой.
Ключевые нововведения:
- Бинарный формат — вместо текста; быстрее парсится, меньше ошибок
- Мультиплексирование — несколько запросов параллельно по одному TCP-соединению
- Сжатие заголовков HPACK — заголовки не дублируются, хранятся в таблице
- Server Push — сервер отправляет ресурсы (CSS, JS) до запроса браузера
- Приоритизация — клиент может задавать приоритет потокам
- Требует
HTTPSде-факто (браузеры поддерживают только over TLS)
Проблемы:
- HOL-blocking перешёл на уровень TCP: потеря пакета останавливает все потоки
- Server Push оказался редко используемым на практике
Связанные технологии:
- Основан на протоколе SPDY от Google
- HPACK — алгоритм сжатия заголовков
HTTP/3 (2022) · RFC 9114
Главное изменение — замена TCP на QUIC поверх UDP.
Ключевые нововведения:
- QUIC вместо TCP — каждый поток независим, потеря пакета не блокирует остальные
- 0-RTT / 1-RTT — рукопожатие QUIC (транспорт) и TLS 1.3 объединены в одно; TCP не используется (QUIC поверх UDP), поэтому почти нет задержки при первом запросе
- Миграция соединения — при смене сети (Wi-Fi → LTE) соединение не разрывается; используется Connection ID вместо IP:порт
- TLS 1.3 встроен в QUIC — шифрование обязательно на уровне протокола
- QPACK — новый алгоритм сжатия заголовков (без проблем с блокировкой как у HPACK)
Где уже используется:
- Cloudflare, Google, YouTube, Meta — все поддерживают HTTP/3
- Nginx ≥ 1.25, Caddy, LiteSpeed