Junior
93
questionbank
Расскажите о версиях HTTP и их отличиях.
Ответ от нейросети
sobes.tech AI
Основные версии HTTP:
- HTTP/0.9: Базовая версия для передачи простых HTML-документов. Поддерживала только метод
GET, отсутствовали заголовки, статусы ответов. - HTTP/1.0: Введена поддержка заголовков (Content-Type, User-Agent), методов
POSTиHEAD, статусов ответов. Соединение закрывалось после каждого запроса/ответа. - HTTP/1.1: Значительные улучшения:
- Постоянные соединения (Persistent Connections) - reuse TCP-соединения для нескольких запросов.
- Конвейеризация (Pipelining) - отправка нескольких запросов без ожидания ответа на предыдущий (хотя реализовано плохо и редко используется).
- Виртуальные хосты (Host header).
- Частичные GET-запросы (Range header).
- Кэширование (Cache-Control, ETag, Last-Modified).
- Методы PUT и DELETE.
- HTTP/2: Протокол на базе SPDY от Google. Основные отличия:
- Бинарный протокол вместо текстового - более эффективный парсинг.
- Мультиплексирование (Multiplexing) - параллельная передача нескольких запросов/ответов по одному TCP-соединению. Устраняет проблему "head-of-line blocking" HTTP/1.1 pipelining.
- Сжатие заголовков (HPACK) - уменьшение размера передаваемых данных.
- Приоритизация (Server Push) - сервер может отправить ресурсы, которые, вероятно, понадобятся клиенту, до того, как он их запросит.
- HTTP/3: Основан на протоколе UDP (с использованием QUIC - Quick UDP Internet Connections) вместо TCP. Нацелен на улучшение производительности, особенно в нестабильных сетях:
- Устранение "head-of-line blocking" на уровне соединения TCP. Если один пакет потерян в TCP, все последующие пакеты блокируются до его переотправки. В QUIC (и HTTP/3) блокируется только поток, которому принадлежит потерянный пакет.
- Более быстрое установление соединения (0-RTT или 1-RTT).
- QUIC включает свои механизмы контроля потока и надежности.
Основные отличия в таблице:
| Фича | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Протокол | TCP | TCP | TCP | UDP (QUIC) |
| Формат | Текстовый | Текстовый | Бинарный | Бинарный |
| Соединение по умолчанию | Кратковременное | Постоянное | Постоянное (мультиплексинг) | Постоянное (QUIC Streams) |
| Мультиплексинг | Нет | Имитация (Pipelining) | Да | Да |
| Сжатие заголовков | Нет | Нет | HPACK | QPACK (в QUIC) |
| Server Push | Нет | Нет | Да | Да |
| HOL Blocking (TCP) | Да (на уровне запроса) | Да (на уровне запроса) | Да (на уровне соединения) | Нет (на уровне потока) |
Пример запроса в HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Пример запроса в HTTP/2 (концептуально, т.к. бинарный):
// Запрос 1: Получить /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Запрос 2: Получить /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...передаются параллельно по одному соединению