Протокол HTTP
HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — прикладной протокол передачи данных, используемый в клиент-серверной модели для обмена информацией между веб-браузерами и веб-серверами. Основное назначение HTTP — передача гипертекстовых документов (HTML-страниц), а также других типов данных (изображений, видео, файлов) в рамках Всемирной паутины. Протокол работает поверх транспортного уровня TCP/IP, по умолчанию использует порт 80. HTTP относится к числу наиболее распространённых сетевых протоколов.
История развития
Ранние версии
Протокол HTTP был разработан в 1989–1991 годах Тимом Бернерсом-Ли (Tim Berners-Lee) в Европейской организации по ядерным исследованиям (CERN) как основа для гипертекстовой информационной системы, которая впоследствии получила название World Wide Web. Первая официальная спецификация HTTP/0.9 (1991 год) описывала простейшую однострочную команду GET, позволяющую запрашивать только HTML-документы без заголовков или метаданных. В 1996 году вышла версия HTTP/1.0 (RFC 1945), расширившая функциональность протокола поддержкой заголовков, кодов состояния и возможностью передачи файлов разных типов.
HTTP/1.1
В 1997 году была опубликована спецификация HTTP/1.1 (RFC 2068, позже обновлённая до RFC 2616 в 1999 году), которая стала основным стандартом на протяжении более десяти лет. Ключевые нововведения: постоянные соединения (keep-alive), конвейерная обработка запросов, виртуальные хосты (Host-заголовок), поддержка кэширования и дополнительные методы (PUT, DELETE, OPTIONS). HTTP/1.1 остаётся наиболее распространённой версией протокола в сетевой инфраструктуре.
HTTP/2
В 2015 году IETF утвердил стандарт HTTP/2 (RFC 7540), основанный на протоколе SPDY, разработанном компанией Google. HTTP/2 вводит бинарное кодирование вместо текстового, мультиплексирование потоков (параллельная передача запросов в рамках одного соединения), сжатие заголовков (HPACK) и приоритизацию ресурсов. Эти улучшения позволили значительно увеличить скорость загрузки веб-страниц, особенно при большом количестве запросов к серверу.
HTTP/3
В 2022 году IETF выпустил стандарт HTTP/3 (RFC 9114), который заменил транспортный протокол TCP на QUIC (на базе UDP). HTTP/3 обеспечивает снижение задержек соединения, улучшенную устойчивость к потере пакетов и встроенное шифрование (TLS 1.3). На 2024 год протокол используется крупными интернет-сервисами (Google, YouTube, Facebook) и набирает популярность среди браузеров и веб-серверов.
Архитектура и принципы работы
Клиент-серверная модель
HTTP функционирует по схеме «запрос — ответ». Клиент (обычно веб-браузер) инициирует соединение с сервером, отправляя HTTP-запрос, содержащий метод, URI, заголовки и иногда тело данных. Сервер обрабатывает запрос и возвращает HTTP-ответ, включающий строку состояния, заголовки и тело ответа. После завершения обмена соединение может быть закрыто или сохранено для последующих запросов (persistent connection).
Методы HTTP
Стандарт определяет несколько методов, указывающих действие, которое необходимо выполнить на сервере:
- GET — запрос на получение ресурса (без тела запроса);
- POST — отправка данных на сервер (создание ресурса или обработка формы);
- PUT — полная замена ресурса по указанному URI;
- PATCH — частичное обновление ресурса;
- DELETE — удаление ресурса;
- HEAD — получение метаданных ресурса без тела ответа;
- OPTIONS — запрос доступных методов для ресурса;
- TRACE — диагностический метод для проверки маршрута запроса.
Структура запроса
HTTP-запрос состоит из трёх частей:
- Стартовая строка: метод, URI, версия протокола (например,
GET /index.html HTTP/1.1). - Заголовки: набор полей в формате «Ключ: Значение» (например,
Host: example.com,User-Agent: Mozilla/5.0). - Тело запроса (опционально): передаваемые данные, например, параметры формы или файлы.
Структура ответа
HTTP-ответ включает:
- Строку состояния: версия протокола, код состояния, текстовое описание (например,
HTTP/1.1 200 OK). - Заголовки: метаданные ответа (время, тип содержимого, длина, параметры кэширования).
- Тело ответа: запрашиваемый ресурс (HTML, JSON, изображение и т.д.).
Коды состояния
Коды состояния сгруппированы в пять классов:
- 1xx (Информационные): сервер получил запрос и продолжает обработку (например, 100 Continue).
- 2xx (Успех): запрос успешно обработан (200 OK, 201 Created, 204 No Content).
- 3xx (Перенаправление): для выполнения запроса необходимы дополнительные действия клиента (301 Moved Permanently, 302 Found, 304 Not Modified).
- 4xx (Ошибка клиента): некорректный запрос (400 Bad Request, 404 Not Found, 403 Forbidden, 429 Too Many Requests).
- 5xx (Ошибка сервера): сервер не смог обработать запрос (500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable).
Безопасность
HTTPS
Для защиты конфиденциальности и целостности данных используется протокол HTTPS (HTTP Secure), работающий поверх TLS (Transport Layer Security) или ранее SSL (Secure Sockets Layer). HTTPS шифрует весь трафик между клиентом и сервером, что предотвращает перехват и подмену данных. По умолчанию использует порт 443. С 2010-х годов HTTPS стал обязательным стандартом для большинства веб-сайтов.
Основные уязвимости
Несмотря на защиту HTTPS, HTTP-протокол уязвим для ряда атак:
- Подмена запроса на стороне сервера (SSRF): злоумышленник манипулирует сервером для отправки запросов к внутренним ресурсам.
- Межсайтовый скриптинг (XSS): внедрение вредоносных скриптов в веб-страницы через HTTP-ответы.
- Подделка межсайтовых запросов (CSRF): выполнение несанкционированных действий от имени аутентифицированного пользователя.
- HTTP-сниффинг: перехват данных в незащищённых сетях (при отсутствии HTTPS).
Связь с другими технологиями
HTML и URI
HTTP тесно интегрирован с языком гипертекстовой разметки HTML и системой унифицированных идентификаторов ресурсов (URI). Каждый веб-ресурс имеет уникальный URI (или URL), который используется в HTTP-запросах для указания местоположения данных.
Cookie и сессии
Протокол поддерживает механизмы управления состоянием с помощью HTTP-куки (Cookie) — небольших фрагментов данных, которые сервер передаёт клиенту для хранения. Куки используются для аутентификации, запоминания пользовательских предпочтений и отслеживания сессий.
Кэширование
HTTP включает заголовки управления кэшированием (Cache-Control, Expires, ETag), которые позволяют браузерам и промежуточным прокси-серверам хранить копии ответов. Это снижает нагрузку на сервер и ускоряет загрузку страниц для пользователей.
Альтернативы и расширения
WebSocket
WebSocket — протокол полноценного двустороннего обмена данными поверх одного TCP-соединения, инициируемый через HTTP Upgrade-запрос. Используется для приложений реального времени (чаты, онлайн-игры, торговые терминалы). В отличие от HTTP, WebSocket не требует постоянного перезапроса страниц.
gRPC
gRPC (Google Remote Procedure Call) — протокол удалённого вызова процедур на основе HTTP/2. Использует сериализацию Protobuf для бинарного кодирования данных и потоковую передачу. Применяется в микросервисной архитектуре для высоконагруженных систем.
Интересные факты
- Протокол HTTP не имеет состояния (stateless) — каждый запрос обрабатывается изолированно, и сервер не запоминает предыдущие взаимодействия. Для учёта состояния используются куки, сессионные токены или внешние хранилища.
- По данным W3Techs на 2024 год, около 80% всех веб-сайтов используют версию HTTP/2, а HTTP/1.1 сохраняется только на устаревших серверах.
- В 2023 году объём HTTP-трафика в интернете превышал 100 эксабайт в месяц, причём около 95% приходилось на защищённые соединения (HTTPS).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →