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

Из чего состоит структура HTTP-запроса?

1.3 Junior🔥 181 комментариев
#API и интеграции#Форматы данных и протоколы

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

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

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

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

HTTP-запрос — это сообщение, которое отправляет клиент серверу для получения ресурса. Понимание его структуры критично для работы с веб-интеграциями.

Основные компоненты HTTP-запроса

1. Запросная строка (Request Line)

Первая строка запроса, содержит три элемента:

МЕТОД ресурс ВерсияПротокола
GET /api/users/123 HTTP/1.1

Компоненты:

  • Метод — действие над ресурсом (GET, POST, PUT, DELETE, PATCH и т.д.)
  • Ресурс — путь к ресурсу на сервере (/api/users/123)
  • Версия протокола — HTTP/1.1 или HTTP/2

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

Пары ключ-значение, которые содержат информацию о запросе и клиенте.

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

ЗаголовокОписаниеПример
HostХост сервера (обязателен в HTTP/1.1)Host: api.example.com
Content-TypeТип отправляемых данныхContent-Type: application/json
Content-LengthРазмер тела запроса в байтахContent-Length: 256
AuthorizationУчётные данные для аутентификацииAuthorization: Bearer token123
AcceptКакой формат данных ожидает клиентAccept: application/json
User-AgentИнформация о клиенте (браузер, приложение)User-Agent: Mozilla/5.0
RefererURL страницы, откуда пришёл запросReferer: https://example.com
CookieДанные сессии клиентаCookie: session_id=abc123
Accept-EncodingПоддерживаемые кодировки (gzip, deflate)Accept-Encoding: gzip
Cache-ControlИнструкции кэшированияCache-Control: max-age=3600
X-Custom-HeaderПользовательские заголовкиX-API-Key: secret_key

Правила заголовков:

  • Один заголовок на строку
  • Формат: Имя: значение
  • Чувствительны к регистру в именах
  • После всех заголовков идёт пустая строка

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

Оптиональный раздел, содержит данные, отправляемые на сервер.

Используется для:

  • POST запросов — создание ресурса
  • PUT запросов — обновление ресурса
  • PATCH запросов — частичное обновление
  • DELETE может содержать тело (редко)

Форматы тела:

  • JSON (самый популярный)
    {
      "name": "John",
      "email": "john@example.com",
      "age": 30
    }
    
  • XML (legacy системы)
    <user>
      <name>John</name>
      <email>john@example.com</email>
    </user>
    
  • Form Data (application/x-www-form-urlencoded)
    name=John&email=john@example.com&age=30
    
  • Multipart/form-data (загрузка файлов)
    ----boundary
    Content-Disposition: form-data; name="file"
    [содержимое файла]
    
  • Plain text или HTML

4. Query String (строка запроса)

Параметры, передаваемые в URL после символа ?:

GET /api/users?page=1&limit=10&sort=name HTTP/1.1

Особенности:

  • Видны в URL
  • Ограничены размером (обычно ~2KB)
  • Используются для фильтрации и пагинации
  • Кодируются URL-encoding (пробел → %20)

Полный пример HTTP-запроса

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 47
Authorization: Bearer eyJhbGc...
User-Agent: PostmanRuntime/7.29.2
Accept: application/json
Connection: keep-alive

{
  "name": "Alice",
  "email": "alice@example.com"
}

Методы HTTP

МетодНазначениеСодержит body
GETПолучить ресурсНет
POSTСоздать новый ресурсДа
PUTПолностью обновить ресурсДа
PATCHЧастично обновить ресурсДа
DELETEУдалить ресурсРедко
HEADКак GET, но без телаНет
OPTIONSПолучить доступные методыНет

Порядок частей запроса

  1. Запросная строка — обязательна
  2. Заголовки — обязательны как минимум Host
  3. Пустая строка — разделитель
  4. Тело запроса — опционально

Best practices при составлении запросов

  • Всегда указывай Content-Type если отправляешь body
  • Используй Keep-Alive для переиспользования соединения
  • Добавляй User-Agent для идентификации
  • Устанавливай правильные Authorization заголовки
  • Используй Timeout для избежания зависаний
  • Кэшируй с Cache-Control когда возможно

Заключение

Структура HTTP-запроса стандартизирована и состоит из четырёх основных частей: запросная строка, заголовки, пустая строка и опциональное тело. Понимание этой структуры необходимо для отладки интеграций, написания API и работы с сетевыми протоколами.