Ответ
Нет, HTTP-метод POST не является идемпотентным. Это его ключевое отличие от идемпотентных методов (GET, PUT, DELETE).
Почему: Основная семантика POST — создание нового ресурса. Каждый идентичный запрос POST потенциально создаёт новый ресурс, изменяя состояние сервера.
Пример:
POST /api/orders HTTP/1.1
Host: example.com
Content-Type: application/json
{"productId": 789, "quantity": 2}
Повторная отправка этого запроса, скорее всего, создаст второй, отдельный заказ с теми же данными, но новым уникальным ID. Это явное изменение состояния системы.
Важное исключение (идемпотентный POST): Сервер может реализовать механизм идемпотентных ключей (Idempotency-Key). Клиент отправляет уникальный ключ с запросом, и сервер гарантирует, что повторные запросы с тем же ключом не приведут к созданию дубликатов, возвращая результат первого успешного запроса.
Ответ 18+ 🔞
А, слушай, ну тут вообще-то всё просто, как три копейки, но народ постоянно путается, блядь. POST — это не идемпотентный метод, вот и вся история. Это его главная, сука, фишка, которая отличает его от всяких там GET, PUT и DELETE.
Почему? Да потому что его основная работа — создавать что-то новое на сервере, ёпта! Каждый раз, когда ты его шлёшь, ты как бы говоришь: «Эй, создай-ка мне ещё одну штуку!». И система меняется, блядь, каждый раз.
Вот смотри, как это выглядит:
POST /api/orders HTTP/1.1
Host: example.com
Content-Type: application/json
{"productId": 789, "quantity": 2}
Отправил раз — заказ создался. Отправил второй раз с теми же данными — оп-па, и у тебя уже второй, отдельный заказ лежит, с новым ID, блядь! Состояние системы изменилось, вот тебе и вся идемпотентность нахуй.
Но! Есть же, сука, хитрые жопы, которые и тут умудряются выкрутиться. Можно реализовать идемпотентные ключи (Idempotency-Key). Клиент присылает с запросом уникальный ключик, и сервер такой: «Ага, этот ключ я уже видел, ебать, не буду я второй раз одно и то же делать!» — и просто отдаёт результат первого запроса. Но это уже не семантика самого метода, а такая, костыль на костыле, блядь, чтобы дураков не плодить.