← Назад к вопросам

Какие знаешь версии HTTP?

1.3 Junior🔥 201 комментариев
#API и веб-протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные версии HTTP (HyperText Transfer Protocol)

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

1. HTTP/0.9 (1991 г.)

  • Однострочный протокол: Поддерживал только метод GET.
  • Нет заголовков: Нельзя было передавать метаданные.
  • Только HTML: Ответ всегда был в формате HTML, после чего соединение закрывалось.
    GET /index.html
    (Ответ: содержимое HTML-файла)
    

2. HTTP/1.0 (1996 г., RFC 1945)

Ввел фундаментальные концепции, многие из которых живы до сих пор.

  • Методы: Добавились HEAD и POST.

  • Заголовки запроса и ответа: Появились Content-Type, Status-Code, User-Agent и др.

  • Коды состояния: Например, 200 OK, 404 Not Found.

  • Поддержка разных типов контента (MIME-типы).

  • Недостаток: Одно соединение на один запрос. Для загрузки страницы с 10 ресурсами браузер открывал 10 TCP-соединений, что было неэффективно.

    GET /index.html HTTP/1.0
    User-Agent: Mozilla/5.0
    Accept: text/html
    
    HTTP/1.0 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 1234
    
    <!DOCTYPE html>...
    

3. HTTP/1.1 (1997 г., RFC 2068, обновлен в RFC 723X)

Долгожитель и стандарт де-факто на протяжении более 15 лет. До сих пор широко используется.

  • Постоянные соединения (Keep-Alive): Соединение по умолчанию не закрывается после ответа, что позволяет отправлять несколько запросов. Управляется заголовком Connection: keep-alive.
  • Конвейеризация (Pipelining): Технология, позволяющая отправлять несколько запросов без ожидания ответов. На практике почти не использовалась из-за проблем с Head-of-Line Blocking (HOLB).
  • Хостинг виртуальных серверов: Заголовок Host стал обязательным, что позволило размещать несколько сайтов на одном IP-адресе.
  • Кэширование: Более совершенные механизмы с заголовками Cache-Control, ETag, If-Modified-Since.
  • Методы: Добавились PUT, DELETE, OPTIONS, TRACE, CONNECT.
  • Чанкованная передача (Chunked Transfer Encoding): Позволяет отправлять ответ частями, не зная его полного размера заранее.
  • Основная проблема: HOLB на транспортном уровне. Если первый запрос в очереди обрабатывается долго, все последующие "застревают".

4. HTTP/2 (2015 г., RFC 7540)

Разработан на основе экспериментального протокола SPDY от Google. Фокус на производительность.

  • Бинарный протокол: В отличие от текстового HTTP/1.1. Более эффективен для разбора, компактен и меньше подвержен ошибкам.

  • Мультиплексирование (Multiplexing): Решает проблему HOLB. В рамках одного TCP-соединения можно передавать множество параллельных потоков (streams) запросов и ответов, которые могут перемешиваться.

  • Сжатие заголовков (HPACK): Заголовки сжимаются, что drastically уменьшает избыточность (например, куки передаются один раз).

  • Приоритизация потоков: Клиент может указать, какие ресурсы важнее.

  • Server Push: Сервер может отправить ресурсы клиенту заранее, до того как тот о них запросит.

  • Сохраняет семантику HTTP/1.1: Методы, статус-коды, заголовки – те же. Это облегчает переход.

    # На уровне приложения всё выглядит привычно
    GET /api/user/1 HTTP/1.1
    Host: example.com
    # Но "под капотом" данные передаются в бинарных фреймах
    

5. HTTP/3 (2022 г., RFC 9114)

Радикальное изменение транспортного уровня. Разработан на основе QUIC (от Google).

  • Замена TCP на UDP: Решает корневую проблему HOLB в TCP. Потери пакетов влияют только на конкретный поток, а не на всё соединение.
  • Встроенное шифрование: QUIC интегрирует TLS 1.3, сокращая время установления безопасного соединения (0-RTT в некоторых случаях).
  • Улучшенное мультиплексирование: Независимые потоки на транспортном уровне.
  • Устойчивость к смене сети: Идентификатор соединения не привязан к IP-адресу, что полезно для мобильных устройств (переключение с Wi-Fi на 4G).
  • Быстрое развертывание: Пакет QUIC "упакован" в UDP, его проще внедрять, чем изменения в ядре TCP.

Сравнительная таблица

ВерсияГодТранспортКлючевые особенностиОсновная проблема
HTTP/1.11997TCPТекстовый, Keep-Alive, заголовок HostHOLB, избыточность заголовков
HTTP/22015TCPБинарный, мультиплексирование, HPACKHOLB на уровне TCP (потеря пакета)
HTTP/32022QUIC (UDP)Встроенное шифрование, нет HOLB, смена сетиНовая и менее распространенная поддержка

Как разработчику PHP backend:

  1. Работать вы будете в основном с семантикой HTTP/1.1, которая сохраняется во всех версиях.
  2. Понимать различия версий важно для настройки сервера (Nginx/Apache), отладки и оптимизации.
  3. Использовать преимущества HTTP/2/3 (например, Server Push) часто требует конфигурации на уровне веб-сервера, а не в PHP-коде.
  4. Анализировать логи и использовать инструменты (Chrome DevTools, curl) нужно с учетом версии протокола.

Тренд ясен: переход на HTTP/3 для увеличения скорости и надежности веб-приложений, особенно с большим количеством ресурсов и мобильных пользователей. Однако HTTP/1.1 и HTTP/2 еще долго будут в эксплуатации.

Какие знаешь версии HTTP? | PrepBro