В чем разница между передачей данных в query string и в body HTTP-запроса?

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

Ответ

Query string и body — это разные части HTTP-запроса, предназначенные для разных целей.

Query String (Параметры URL)

  • Расположение: Часть URL после ?.
  • Назначение: Передача параметров для идентификации, фильтрации, сортировки или пагинации ресурсов.
  • Ограничения: Длина URL ограничена (обычно ~2048 символов), данные видны в логах и истории браузера.
  • Пример (GET-запрос):
    GET /api/users?role=admin&sort=name&page=2 HTTP/1.1

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

  • Расположение: Отдельная часть запроса после заголовков.
  • Назначение: Передача данных для создания или изменения ресурсов (например, JSON объекта).
  • Преимущества: Нет жестких ограничений на размер, поддерживает сложные структуры (вложенные объекты, массивы), данные не видны в URL.
  • Пример (POST-запрос):

    POST /api/users HTTP/1.1
    Content-Type: application/json
    
    {
      "name": "John",
      "email": "john@example.com"
    }

Когда что использовать?

  • Используйте query для неконфиденциальных параметров, которые изменяют как данные возвращаются (фильтры, поиск).
  • Используйте body для конфиденциальных данных или информации, которая изменяет сами данные на сервере (создание, обновление). Технически можно передать данные в query для POST-запроса, но это противоречит семантике HTTP и является плохой практикой.