Открыть сервис

HTTP/1.1

HTTP/1.1 (HyperText Transfer Protocol version 1.1) — это версия протокола прикладного уровня передачи гипертекстовых данных, используемая в распределённых информационных системах, прежде всего во Всемирной паутине (World Wide Web). HTTP/1.1 является развитием протокола HTTP/1.0 и на протяжении длительного времени (с конца 1990-х до середины 2010-х годов) служил основным стандартом для обмена данными между веб-браузерами и веб-серверами. Протокол определён в спецификации RFC 2616 (1999 год), позднее уточнённой в RFC 7230—7235 (2014 год). Ключевыми особенностями HTTP/1.1 являются поддержка постоянных соединений (keep-alive), конвейерной обработки запросов (pipelining), виртуальных хостов и механизмов кэширования.

История развития

Предпосылки создания

Протокол HTTP/1.0, стандартизированный в 1996 году (RFC 1945), имел существенный недостаток: каждое HTTP-соединение открывалось только для одного запроса и одного ответа, после чего закрывалось. При загрузке веб-страницы, содержащей множество ресурсов (изображения, стили, скрипты), браузеру приходилось устанавливать отдельное TCP-соединение для каждого элемента, что приводило к значительным задержкам и повышенной нагрузке на сеть.

Стандартизация

Работы над HTTP/1.1 начались в 1995 году в рамках рабочей группы HTTP (HTTP Working Group) Инженерного совета Интернета (IETF). Основная цель заключалась в устранении недостатков HTTP/1.0 и улучшении производительности. Первая версия спецификации была опубликована в январе 1997 года как RFC 2068, однако окончательная и наиболее широко используемая версия вышла в июне 1999 года как RFC 2616. В 2014 году спецификация была переработана и разделена на несколько документов: RFC 7230 (синтаксис и маршрутизация сообщений), RFC 7231 (семантика и содержимое), RFC 7232 (условные запросы), RFC 7233 (запросы диапазонов), RFC 7234 (кэширование) и RFC 7235 (аутентификация).

Внедрение и распространение

К началу 2000-х годов HTTP/1.1 стал доминирующим протоколом в Интернете. Все основные веб-серверы (Apache HTTP Server, Nginx, Internet Information Services) и браузеры (Internet Explorer, Netscape Navigator, Mozilla Firefox, Google Chrome) поддерживали его. Протокол оставался основным до появления HTTP/2 в 2015 году, но до сих пор используется значительной частью веб-сайтов и серверов.

Основные характеристики

Постоянные соединения (Keep-Alive)

Главное нововведение HTTP/1.1 — возможность использования одного TCP-соединения для нескольких последовательных запросов и ответов. По умолчанию в HTTP/1.1 соединение считается постоянным, если в заголовке не указано Connection: close. Это позволяет браузеру загружать множество элементов страницы через одно соединение, снижая задержки на установку новых соединений и уменьшая нагрузку на сервер.

Конвейерная обработка (Pipelining)

HTTP/1.1 позволяет отправлять несколько запросов на сервер без ожидания ответов на предыдущие. Сервер обязан обрабатывать запросы в порядке их поступления и отправлять ответы в том же порядке. На практике конвейерная обработка не получила широкого распространения из-за проблем с совместимостью (некоторые прокси-серверы и серверы обрабатывали её некорректно) и ограничений (так называемая «проблема головы очереди» — Head-of-Line blocking, когда медленный ответ блокирует все последующие).

Виртуальные хосты (Virtual Hosting)

HTTP/1.1 ввёл обязательный заголовок Host, который указывает имя домена, к которому обращается клиент. Это позволило размещать несколько веб-сайтов на одном IP-адресе и одном веб-сервере. Ранее, в HTTP/1.0, для различения сайтов использовались разные IP-адреса, что было неэффективно.

Механизмы кэширования

Протокол расширил возможности управления кэшированием. Были введены заголовки Cache-Control (с директивами max-age, no-cache, no-store, public, private и другими), ETag (тег объекта для условных запросов), а также уточнены правила работы с заголовками Expires и Last-Modified. Это позволило более гибко управлять временем жизни кэшированных копий ресурсов.

Условные запросы и запросы диапазонов

HTTP/1.1 поддерживает условные запросы (с заголовками If-Modified-Since, If-None-Match), которые позволяют клиенту запрашивать ресурс только в том случае, если он изменился с момента последнего запроса. Также протокол поддерживает запросы диапазонов (заголовок Range), позволяющие загружать часть файла (например, для докачки прерванной загрузки или потокового видео).

Улучшенная аутентификация

В HTTP/1.1 была добавлена поддержка механизма «дайджест-аутентификации» (Digest Access Authentication), более безопасного, чем базовая аутентификация (Basic Access Authentication), так как пароль передаётся не в открытом виде, а в виде хэша.

Структура сообщений

Запрос (Request)

HTTP-запрос состоит из строки запроса, заголовков и тела сообщения (опционально). Строка запроса включает метод (GET, POST, PUT, DELETE и другие), URI (унифицированный идентификатор ресурса) и версию протокола (HTTP/1.1). Пример: `` GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html ``

Ответ (Response)

HTTP-ответ состоит из строки статуса, заголовков и тела сообщения. Строка статуса включает версию протокола, код состояния (например, 200 OK, 404 Not Found, 500 Internal Server Error) и текстовое описание. Пример: `` HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 1234 Date: Mon, 01 Jan 2024 12:00:00 GMT ``

Заголовки

Заголовки делятся на общие (применимые и к запросу, и к ответу), заголовки запроса, заголовки ответа и заголовки сущности. Ключевые заголовки HTTP/1.1 включают:

  • Host — обязательный, указывает имя хоста.
  • Connection — управление постоянным соединением (например, keep-alive или close).
  • Content-Length — длина тела сообщения в байтах.
  • Content-Type — тип содержимого (MIME-тип).
  • Transfer-Encoding — кодирование передачи (например, chunked для передачи частями).
  • Cache-Control — директивы кэширования.

Методы HTTP/1.1

Протокол определяет несколько методов (глаголов), указывающих желаемое действие с ресурсом:

  • GET — запрос содержимого ресурса.
  • HEAD — запрос заголовков ресурса без тела.
  • POST — отправка данных на сервер для обработки (например, форма).
  • PUT — замена ресурса переданными данными.
  • DELETEудаление ресурса.
  • OPTIONSзапрос информации о поддерживаемых методах.
  • TRACEотладка, возвращает полученный запрос.
  • CONNECT — установка туннеля (например, для HTTPS через прокси).

Коды состояния

Коды состояния HTTP/1.1 группируются по классам:

  • 1xx (Информационные) — запрос принят, продолжается обработка (например, 100 Continue).
  • 2xx (Успешные) — запрос успешно обработан (200 OK, 201 Created, 204 No Content).
  • 3xx (Перенаправления) — требуется дополнительное действие (301 Moved Permanently, 302 Found, 304 Not Modified).
  • 4xx (Ошибки клиента) — ошибка на стороне клиента (400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found).
  • 5xx (Ошибки сервера) — ошибка на стороне сервера (500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable).

Недостатки и ограничения

Проблема головы очереди (Head-of-Line blocking)

В рамках одного TCP-соединения запросы и ответы обрабатываются строго последовательно. Если ответ на первый запрос задерживается, все последующие запросы вынуждены ждать. Это ограничение существенно снижало производительность при загрузке сложных веб-страниц.

Избыточность заголовков

Каждый запрос и ответ содержат полные заголовки, которые часто дублируются (например, User-Agent, Accept, Cookie). Это увеличивает объём передаваемых данных, особенно при большом количестве мелких запросов.

Отсутствие сжатия заголовков

В отличие от HTTP/2, HTTP/1.1 не поддерживает сжатие заголовков, что приводит к дополнительным накладным расходам.

Ограниченная поддержка потоковой передачи

Протокол не оптимизирован для одновременной передачи множества потоков данных. Для обхода ограничений разработчики использовали такие техники, как склейка ресурсов (CSS sprites, объединение JavaScript-файлов) и шардинг доменов (размещение ресурсов на нескольких поддоменах для увеличения числа параллельных соединений).

Сравнение с другими версиями

HTTP/1.0

  • HTTP/1.1 ввёл постоянные соединения (keep-alive) и обязательный заголовок Host.
  • HTTP/1.0 не поддерживал конвейерную обработку и запросы диапазонов.
  • В HTTP/1.0 кэширование было менее гибким (только заголовки Expires и Pragma).

HTTP/2

  • HTTP/2 (2015 год) использует двоичный формат вместо текстового, что упрощает синтаксический анализ.
  • HTTP/2 поддерживает мультиплексирование (одновременная передача нескольких потоков данных по одному соединению), что устраняет проблему головы очереди.
  • HTTP/2 сжимает заголовки (HPACK).
  • HTTP/2 поддерживает приоритизацию потоков и серверный push.
  • HTTP/1.1 остаётся более простым в реализации и отладке, но уступает в производительности на современных высоконагруженных сайтах.

HTTP/3

  • HTTP/3 (2022 год) работает поверх протокола QUIC (основан на UDP), что обеспечивает ещё более низкую задержку и устойчивость к потере пакетов.
  • HTTP/1.1 несовместим с QUIC и требует TCP.

Применение в России

В России HTTP/1.1 широко использовался и продолжает использоваться на большинстве веб-сайтов, особенно на небольших и средних. Многие российские хостинг-провайдеры и серверы (например, на базе Nginx и Apache) по умолчанию поддерживают HTTP/1.1. В соответствии с законодательством РФ, передача данных через HTTP/1.1 может подвергаться фильтрации и блокировкам, осуществляемым Роскомнадзором в рамках Единого реестра запрещённых сайтов. При этом протокол не шифрует данные (в отличие от HTTPS), что делает его уязвимым для перехвата трафика.

Источники

  1. RFC 2616 — Hypertext Transfer Protocol — HTTP/1.1 (1999).
  2. RFC 7230—7235 — HTTP/1.1 Message Syntax and Routing, Semantics and Content, Conditional Requests, Range Requests, Caching, Authentication (2014).
  3. RFC 1945 — Hypertext Transfer Protocol — HTTP/1.0 (1996).
  4. Fielding, R., Gettys, J., Mogul, J., et al. «Hypertext Transfer Protocol — HTTP/1.1». Network Working Group, 1999.
  5. Gourley, D., Totty, B., Sayer, M., et al. «HTTP: The Definitive Guide». O'Reilly Media, 2002.
  6. Федеральный закон от 27.07.2006 № 149-ФЗ «Об информации, информационных технологиях и о защите информации».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →