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

HTTP

HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — это протокол прикладного уровня модели OSI, используемый для передачи данных в распределённых информационных системах, в первую очередь во Всемирной паутине (World Wide Web). HTTP является основой обмена данными между веб-браузерами (клиентами) и веб-серверами. Протокол работает по схеме «запрос-ответ»: клиент отправляет серверу запрос, содержащий метод, URI и версию протокола, а сервер возвращает ответ, включающий статус-код, заголовки и, при необходимости, тело сообщения (например, HTML-страницу, изображение или JSON-данные). HTTP не сохраняет состояние между запросами (stateless), что означает, что каждый запрос обрабатывается сервером независимо, без контекста предыдущих взаимодействий. Для поддержания сессий и авторизации используются дополнительные механизмы, такие как cookies, токены или сессионные идентификаторы. Протокол был разработан в 1989–1991 годах Тимом Бернерсом-Ли в ЦЕРНе (Европейская организация по ядерным исследованиям) как часть проекта создания глобальной гипертекстовой системы.

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

Ранние версии (HTTP/0.9 и HTTP/1.0)

Первая документально зафиксированная версия протокола, позже названная HTTP/0.9, была предложена Тимом Бернерсом-Ли в 1991 году. Она представляла собой крайне простой протокол: клиент отправлял единственную строку запроса (например, GET /index.html), а сервер отвечал только телом документа (HTML-страницей) без заголовков и кодов состояния. Поддерживался только метод GET. HTTP/0.9 не имел механизмов для передачи метаданных (тип контента, кодировка), что ограничивало его применение.

В 1996 году была опубликована спецификация HTTP/1.0 (RFC 1945). Она ввела заголовки запроса и ответа, коды состояния (например, 200 OK, 404 Not Found), поддержку методов POST и HEAD, а также возможность передачи произвольных типов данных (через заголовок Content-Type). Однако HTTP/1.0 не решал проблему множественных соединений: для каждого запроса требовалось открывать новое TCP-соединение, что приводило к значительным задержкам.

HTTP/1.1

В 1997 году вышла спецификация HTTP/1.1 (RFC 2068, позже обновлённая до RFC 2616 в 1999 году). Эта версия стала стандартом де-факто для веба на протяжении почти двух десятилетий. Ключевые улучшения включали:

HTTP/1.1 остаётся широко используемым протоколом, но его ограничения (например, head-of-line blocking — блокировка очереди запросов) привели к разработке более новых версий.

HTTP/2

Спецификация HTTP/2 (RFC 7540) была опубликована в 2015 году на основе протокола SPDY, разработанного компанией Google. Основные нововведения:

HTTP/2 не изменяет семантику протокола (методы, коды состояния, заголовки остаются теми же), но меняет способ передачи данных. По состоянию на 2024 год значительная часть веб-трафика (более 60 %) использует HTTP/2.

HTTP/3

HTTP/3 (RFC 9114, 2022 год) является следующим поколением протокола. В отличие от предыдущих версий, HTTP/3 работает поверх QUIC (Quick UDP Internet Connections) — транспортного протокола на основе UDP, разработанного Google. Ключевые особенности:

HTTP/3 активно внедряется крупными платформами (Google, YouTube, Facebook, Cloudflare) и поддерживается большинством современных браузеров.

Архитектура и принципы работы

Модель «клиент-сервер»

HTTP основан на архитектуре «клиент-сервер». Клиентом обычно выступает веб-браузер или мобильное приложение, сервером — программа, обрабатывающая запросы и возвращающая ресурсы (веб-серверы, такие как Apache, Nginx, IIS). Промежуточные узлы, такие как прокси-серверы, шлюзы и кэширующие серверы, могут модифицировать, фильтровать или кэшировать трафик.

Формат сообщений

Сообщения HTTP делятся на запросы (request) и ответы (response). Каждое сообщение состоит из:

  1. Стартовой строки: для запроса — метод, URI, версия протокола (например, GET /index.html HTTP/1.1); для ответа — версия протокола, код состояния, пояснение (например, HTTP/1.1 200 OK).
  2. Заголовков (headers): набор пар «ключ: значение», передающих метаданные (тип контента, длина, язык, информация о кэшировании, cookies и т.д.).
  3. Пустой строки, отделяющей заголовки от тела.
  4. Тела сообщения (body): опционально, содержит передаваемые данные (HTML, JSON, файл).

Методы HTTP

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

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

Ответ сервера содержит трёхзначный код состояния, классифицируемый по первой цифре:

Безопасность

HTTP vs HTTPS

HTTP передаёт данные в открытом виде, что делает его уязвимым для перехвата и модификации (атаки «человек посередине»). Для обеспечения конфиденциальности и целостности используется HTTPS (HTTP Secure) — комбинация HTTP с протоколами шифрования TLS (Transport Layer Security) или SSL (Secure Sockets Layer). HTTPS шифрует всё содержимое запросов и ответов, включая URI, заголовки и тело. По состоянию на 2024 год более 90 % веб-трафика использует HTTPS, а поисковые системы (Google) и браузеры (Chrome, Firefox) помечают HTTP-сайты как «небезопасные».

Атаки на HTTP

Наиболее распространённые уязвимости, связанные с HTTP:

Для защиты применяются такие меры, как Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), SameSite cookies, использование анти-CSRF токенов и регулярное обновление серверного ПО.

Применение

Веб-серфинг

Основное применение HTTP — загрузка веб-страниц в браузере. Браузер отправляет GET-запросы на сервер, получает HTML-документ, а затем автоматически запрашивает связанные ресурсы (CSS, JavaScript, изображения, шрифты). Современные браузеры поддерживают HTTP/2 и HTTP/3 для ускорения загрузки.

API и веб-сервисы

HTTP широко используется для построения RESTful API (Representational State Transfer). В этом контексте ресурсы представляются в виде URI, а методы HTTP (GET, POST, PUT, DELETE) соответствуют операциям CRUD (Create, Read, Update, Delete). Данные обычно передаются в формате JSON или XML. Примеры: API социальных сетей (Twitter, VK), облачных сервисов (AWS S3, Google Drive), платёжных систем (Stripe, PayPal).

Потоковая передача и загрузка файлов

HTTP поддерживает передачу больших объёмов данных (видео, аудио, архивы) через частичные запросы (Range Requests) и потоковую передачу (chunked encoding). Протокол используется для загрузки файлов через браузер (download) и выгрузки (upload) через формы или API.

Веб-сокеты и реальное время

Хотя HTTP сам по себе не предназначен для двусторонней связи в реальном времени, протокол WebSocket (RFC 6455) использует HTTP-запрос для установки соединения (через заголовок Upgrade), после чего переключается на собственный протокол. Это позволяет реализовать чаты, онлайн-игры и уведомления.

Интересные факты

Источники

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

На главную BFOmetr →