Ответ
HTTP (HyperText Transfer Protocol) — это основной протокол для передачи данных в вебе. Он прошел несколько этапов эволюции:
HTTP/0.9 (1991) — Самая первая, простейшая версия.
- Поддерживался только один метод:
GET. - Ответ сервера состоял только из тела документа (HTML), без заголовков и кодов состояния.
- Поддерживался только один метод:
HTTP/1.0 (1996) — Значительное расширение.
- Появились заголовки (headers) для запроса и ответа, что позволило передавать метаинформацию.
- Добавлены методы
POSTиHEAD. - Введены коды состояния (например,
200 OK,404 Not Found). - Соединение закрывалось после каждого запроса-ответа, что создавало большие накладные расходы.
HTTP/1.1 (1997) — Стандарт, который доминировал более 15 лет.
- Persistent Connections (Keep-Alive): Соединение по умолчанию остается открытым для нескольких запросов, что значительно снижает задержки.
- Pipelining: Возможность отправлять несколько запросов, не дожидаясь ответа на предыдущие (хотя на практике это вызывало проблемы с
Head-of-Line blocking). - Chunked Transfer Encoding: Позволяет передавать данные по частям (чанками).
- Улучшено кэширование, добавлены новые методы (
PUT,DELETE,OPTIONSи др.).
HTTP/2 (2015) — Революционное обновление, направленное на производительность.
- Бинарный протокол: Вместо текстового, что упрощает парсинг и уменьшает количество ошибок.
- Мультиплексирование: Позволяет передавать несколько запросов и ответов одновременно в рамках одного TCP-соединения, решая проблему
Head-of-Line blockingна уровне протокола. - Сжатие заголовков (HPACK): Уменьшает избыточность передаваемых данных.
- Server Push: Сервер может отправлять ресурсы клиенту до того, как он их запросит.
HTTP/3 (2022) — Новейшая версия, основанная на протоколе QUIC.
- Работает поверх QUIC (UDP) вместо TCP. Это решает проблему
Head-of-Line blockingна уровне транспортного протокола (TCP), так как потеря одного пакета не блокирует остальные потоки. - Более быстрое установление соединения (0-RTT или 1-RTT).
- Встроенное шифрование (TLS 1.3), что делает соединение более безопасным.
- Работает поверх QUIC (UDP) вместо TCP. Это решает проблему
Краткое сравнение:
| Версия | Протокол | Соединение | Блокировка (HOL) | Основное улучшение |
|---|---|---|---|---|
| HTTP/1.0 | Текстовый | 1 запрос/соединение | Да | Заголовки, методы, статусы |
| HTTP/1.1 | Текстовый | Переиспользуемое | Да (на уровне HTTP) | Keep-Alive, Pipelining |
| HTTP/2 | Бинарный | Переиспользуемое | Нет (на уровне HTTP) | Мультиплексирование, сжатие заголовков |
| HTTP/3 | Бинарный | Переиспользуемое | Нет (на уровне TCP) | Переход на QUIC/UDP, скорость |