Sobes.tech
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
// ...передаются параллельно по одному соединению