Из чего состоит POST-запрос в HTTP?

«Из чего состоит POST-запрос в HTTP?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

POST-запрос — это основной метод HTTP для отправки данных на сервер с целью создания или обновления ресурса. Как тестировщик, я разбираю его на компоненты для составления корректных и некорректных тестовых сценариев.

Структура POST-запроса:

  1. Стартовая строка (Request Line): Содержит метод (POST), путь к ресурсу (/api/users) и версию протокола (HTTP/1.1).
  2. Заголовки (Headers): Критически важны для интерпретации тела запроса сервером.
    • Content-Type: Обязательный для POST. Указывает формат тела. Например:
      • application/json — для JSON.
      • application/x-www-form-urlencoded — для данных формы.
      • multipart/form-data — для загрузки файлов.
    • Content-Length: Размер тела в байтах.
    • Authorization: Для аутентификации.
  3. Тело запроса (Request Body): Сами отправляемые данные. Формат должен строго соответствовать Content-Type.
  4. Параметры строки запроса (Query Parameters): Опционально. Добавляются в URL после ? (например, POST /api/log?source=test). Используются для дополнительных инструкций, а не для основных данных.

Пример тестового сценария: Я тестирую создание заказа через POST /api/orders. Позитивный тест включает валидные заголовки и тело. Негативный тест — отправку тела в формате XML при указанном Content-Type: application/json, чтобы проверить обработку ошибок сервером.

### Пример POST-запроса для создания заказа (формат для REST-клиента)
POST https://api.shop.com/v1/orders
Content-Type: application/json
Authorization: Bearer {{auth_token}}

{
  "productId": 789,
  "quantity": 2,
  "customerNote": "Доставить до 18:00"
}

Ключевое отличие от GET: У GET запроса нет тела, все параметры передаются только в URL. POST предназначен для операций, изменяющих состояние на сервере.