Можно ли отправить HTTP POST-запрос без тела (body)?

«Можно ли отправить HTTP POST-запрос без тела (body)?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. Спецификация HTTP не требует обязательного наличия тела в POST-запросе, хотя он часто используется для передачи данных.

Почему это возможно:

  • Метод HTTP определяется заголовком запроса, а не наличием тела.
  • Заголовок Content-Length: 0 явно указывает на пустое тело.

Примеры:

  1. Сырой HTTP-запрос:
    POST /api/process/start HTTP/1.1
    Host: api.example.com
    Content-Length: 0
    Authorization: Bearer token123
  2. Использование cURL:
    curl -X POST https://api.example.com/action 
     -H "Content-Length: 0" 
     -H "Authorization: Bearer token123"

Типичные сценарии использования POST без тела:

  • Запуск предопределённого процесса на сервере (например, POST /jobs/cleanup).
  • Действия, где все параметры передаются через заголовки или URL.
  • Реализации API, где определённый эндпоинт является «триггером».

Важно: Серверное приложение должно быть спроектировано на обработку таких запросов. В RESTful API POST-запросы без тела могут считаться неидиоматичными.