Что из себя представляет HTTP запрос


HTTP-запрос (HTTP request) — это сообщение, которое клиент (обычно веб-браузер, мобильное приложение или скрипт) отправляет на сервер по протоколу HTTP (HyperText Transfer Protocol) для получения ресурса или выполнения действия. Он состоит из строго структурированных компонентов и может содержать как только заголовки, так и тело (payload), если тип запроса это позволяет. Протокол HTTP работает по принципу клиент–сервер и является основой веба.

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

HTTP-запрос включает три основных части:

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

Это первая строка запроса, определяющая:

  • Метод запроса

  • Путь (URI)

  • Версию протокола HTTP

Пример:

GET /index.html HTTP/1.1

Расшифровка:

  • GET — метод запроса

  • /index.html — путь к ресурсу

  • HTTP/1.1 — версия протокола

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

Заголовки содержат метаинформацию о запросе: о клиенте, типах данных, которые он может принять, языках, авторизации, и т. д.

Пример:

Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Accept-Language: en-US
Connection: keep-alive

Классы заголовков:

  • General headers — применимы к запросу и ответу (например, Cache-Control)

  • Request headers — только для запросов (Accept, User-Agent, Referer, Authorization)

  • Entity headers — описывают тело сообщения (Content-Type, Content-Length)

1.3. Тело запроса (Body, Payload)

Присутствует только у некоторых методов (POST, PUT, PATCH) и содержит данные, отправляемые на сервер (формы, JSON, файлы и т. д.).

Пример (для POST):

Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=admin&password=123

2. Методы HTTP-запросов

Каждый метод определяет действие, которое клиент хочет выполнить:

  • GET — получение ресурса (без тела запроса)

  • POST — отправка данных на сервер (обычно для создания ресурса)

  • PUT — обновление ресурса полностью

  • PATCH — частичное обновление ресурса

  • DELETE — удаление ресурса

  • HEAD — как GET, но без тела (только заголовки)

  • OPTIONS — возвращает поддерживаемые методы и заголовки

  • CONNECT — используется для туннелирования, чаще в HTTPS

  • TRACE — отладочный метод, возвращает полученный запрос обратно клиенту

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

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

GET /page.html HTTP/1.1
Host: www.example.com
Accept: text/html
Connection: close

3.2. POST-запрос с формой

POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
username=admin&password=123456

3.3. POST-запрос с JSON

POST /api/data HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 51
{"email": "user@example.com", "password": "secret"}

4. Особенности HTTP-запросов

4.1. Идемпотентность

  • Методы GET, PUT, DELETE, HEAD, OPTIONS — идемпотентны, то есть многократный вызов приводит к одному и тому же результату.

  • POST — не идемпотентен: каждый вызов может создавать новые сущности.

4.2. Кеширование

  • Запросы могут быть кешированы (особенно GET) по заголовкам: Cache-Control, ETag, Last-Modified.

4.3. Сессии и Cookies

  • Заголовки Cookie и Set-Cookie позволяют сохранять состояния между запросами.

  • Сессии могут использоваться для аутентификации пользователя, отслеживания действий и т. д.

5. URL и параметры запроса

5.1. Параметры строки запроса (Query String)

Добавляются к URL после знака ?:

GET /search?q=python&page=2 HTTP/1.1

Внутри сервера они обрабатываются как пары ключ-значение.

5.2. Путь (Path Parameters)

Используются в REST API:

GET /user/123 HTTP/1.1

Здесь 123 — идентификатор ресурса (обычно ID пользователя).

6. Протоколы HTTP/1.1, HTTP/2, HTTP/3

  • HTTP/1.1 — основан на текстовом протоколе, поддерживает keep-alive, но ограничен последовательной передачей.

  • HTTP/2 — бинарный протокол, поддерживает мультиплексирование (несколько запросов по одному соединению), заголовки сжатые (HPACK).

  • HTTP/3 — работает поверх протокола QUIC (UDP), ускоряет загрузку, особенно на мобильных и нестабильных соединениях.

7. Инструменты для анализа HTTP-запросов

  • Browser DevTools (вкладка Network) — позволяет увидеть каждый HTTP-запрос, заголовки, время ответа и т. д.

  • Postman — для ручного тестирования API

  • curl — командная строка для отправки HTTP-запросов

  • Fiddler, Charles — прокси-инспекторы для захвата и анализа трафика

8. HTTP и безопасность

  • HTTPS — шифрует весь HTTP-запрос, включая заголовки и тело.

  • CORS (Cross-Origin Resource Sharing) — ограничивает доступ к ресурсам с других доменов.

  • CSRF — уязвимость, при которой злоумышленник может отправить запрос от имени пользователя.

  • XSS — инъекция скриптов через пользовательские данные в ответе, но может начаться с запроса.

  • Rate limiting — защита от чрезмерного количества запросов (ботов, DDoS).

HTTP-запрос — это основа взаимодействия между клиентом и сервером в веб-пространстве. Он предоставляет не только путь к получению информации, но и механизм управления состояниями, данными и действиями в распределённой среде Интернета.