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

HTTP-запрос

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

Структура HTTP-запроса

Каждый HTTP-запрос состоит из нескольких обязательных и опциональных компонентов, которые передаются в виде текстовых строк, разделённых символами перевода строки (CRLF).

Стартовая строка (Request Line)

Первая строка запроса задаёт его основную цель. Она включает три элемента:

  1. Метод HTTP (HTTP Method) — глагол, указывающий на желаемое действие с ресурсом.
  2. URI (Uniform Resource Identifier) — путь к запрашиваемому ресурсу на сервере (например, /index.html или /api/users).
  3. Версия протокола (HTTP Version) — версия HTTP, используемая клиентом (например, HTTP/1.1, HTTP/2).

Пример стартовой строки: `` GET /images/logo.png HTTP/1.1 ``

Заголовки (Headers)

Заголовки представляют собой набор пар «ключ: значение», которые передают метаданные о запросе, клиенте и ожидаемом ответе. Они следуют за стартовой строкой, каждый с новой строки. Конец блока заголовков обозначается пустой строкой.

Основные категории заголовков:

Пример заголовков: `` Host: ru.wikipedia.org User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Accept: text/html,application/xhtml+xml Accept-Language: ru-RU,ru;q=0.9 ``

Тело запроса (Body)

Тело запроса является опциональным и используется для передачи данных на сервер. Оно присутствует в запросах, которые изменяют состояние сервера или создают новые ресурсы (например, методы POST, PUT, PATCH). Тело может содержать данные в различных форматах: JSON, XML, URL-кодированные параметры формы, бинарные файлы и т.д. Наличие тела обязательно сопровождается заголовком Content-Type, указывающим формат данных, и Content-Length, указывающим его размер.

Методы HTTP

Метод HTTP определяет семантику запроса. Наиболее распространённые методы регламентированы стандартом RFC 7231 и последующими спецификациями:

Версии протокола и их влияние на запросы

HTTP/0.9

Первая версия, крайне примитивная. Запрос состоял только из метода GET и пути к ресурсу. Заголовки и версия протокола отсутствовали.

HTTP/1.0

Ввёл версию протокола, заголовки и метод POST. Каждый запрос требовал установки нового TCP-соединения, что снижало производительность.

HTTP/1.1

Стандарт, доминировавший в вебе на протяжении десятилетий. Ключевые нововведения:

HTTP/2

Кардинально изменил формат передачи, перейдя от текстового к бинарному (фреймы). Основные особенности:

HTTP/3

Использует транспортный протокол QUIC (основанный на UDP) вместо TCP. Это обеспечивает:

Примеры HTTP-запросов

Простой GET-запрос

`` GET /wiki/HTTP HTTP/1.1 Host: ru.wikipedia.org ``

POST-запрос с данными формы

``` POST /login HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27

username=user&password=12345 ```

Запрос с авторизацией (Bearer Token)

`` GET /api/private/data HTTP/1.1 Host: api.example.com Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``

Жизненный цикл HTTP-запроса

  1. Разрешение DNS: клиент преобразует доменное имя из URL в IP-адрес сервера.
  2. Установка TCP-соединения: между клиентом и сервером выполняется тройное рукопожатие (SYN, SYN-ACK, ACK).
  3. Для HTTPS — установка TLS-соединения: выполняется рукопожатие TLS для согласования шифрования и обмена сертификатами.
  4. Отправка запроса: клиент формирует и отправляет HTTP-запрос через установленное соединение.
  5. Обработка на сервере: веб-сервер (например, Nginx, Apache) принимает запрос, анализирует его и передаёт приложению (например, на PHP, Python, Java) для генерации ответа.
  6. Получение ответа: сервер отправляет HTTP-ответ, содержащий статус-код, заголовки и тело.
  7. Закрытие соединения: в HTTP/1.0 соединение закрывается после ответа. В HTTP/1.1 и выше оно может оставаться открытым для последующих запросов.

Безопасность HTTP-запросов

Протокол HTTP сам по себе не обеспечивает шифрования, поэтому данные передаются в открытом виде. Для защиты используется протокол HTTPS (HTTP over TLS), который шифрует всё содержимое запроса и ответа. При использовании HTTPS перехватчик может видеть только IP-адрес сервера и, возможно, доменное имя (из-за SNI — Server Name Indication), но не URI, заголовки или тело запроса.

Также существуют механизмы защиты от подделки запросов:

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

Источники

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

На главную BFOmetr →