Почему HTTP-метод POST считается небезопасным (non-safe)?

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

Ответ

Метод POST классифицируется как небезопасный (non-safe) согласно спецификации HTTP, потому что он предназначен для операций, изменяющих состояние ресурса на сервере. В отличие от безопасных методов (например, GET), которые должны только запрашивать данные, POST-запрос может иметь побочные эффекты: создание, обновление или удаление данных.

Ключевые причины:

  1. Изменение состояния: Основная цель POST — отправить данные для обработки, что приводит к изменению на сервере.
  2. Идемпотентность: POST не является идемпотентным. Повторение одного и того же запроса может привести к созданию нескольких ресурсов (например, двух одинаковых заказов).
  3. Безопасность передачи: Хотя данные передаются в теле запроса, а не в URL, это не обеспечивает безопасность. Для защиты от прослушивания необходим HTTPS.

Пример запроса:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

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

Этот запрос, скорее всего, создаст нового пользователя в системе, что является изменяющей состояние операцией.