Вебсправочник
Основы веб-разработки

Идемпотентность HTTP: можно ли безопасно повторить запрос

Идемпотентность описывает ожидаемый эффект повторного выполнения одной операции. Она важна, когда клиент не получил ответ и не знает, успел ли сервер обработать запрос.

Назначение

Идемпотентность описывает ожидаемый эффект повторного выполнения одной операции. Она важна, когда клиент не получил ответ и не знает, успел ли сервер обработать запрос.

Как это работает

По семантике HTTP повтор одинакового PUT или DELETE должен иметь тот же предполагаемый эффект на состояние, что и один такой запрос. Ответы при этом могут отличаться. POST не получает такую гарантию автоматически.

Пример

Учебный сценарий:
DELETE /drafts/42 → 204
DELETE /drafts/42 → 404

Итоговое состояние в обоих случаях: черновика нет.

Другой сценарий:
POST /orders → создание заказа
Повтор без защиты от дублей может создать ещё один заказ.

Что должно получиться

Пример показывает, почему одинаковый эффект не требует одинакового статуса. Он также отделяет удаление конкретного ресурса от создания новой сущности при каждом вызове.

Граница применения и частая ошибка

Название метода не исправляет неверную серверную реализацию. Идемпотентность не равна отсутствию журналирования и не означает безопасность GET, если приложение ошибочно меняет через него данные. Ключи идемпотентности требуют согласованной серверной поддержки.

Самостоятельная проверка

Для своей тестовой операции запишите ожидаемый эффект первого и второго вызова. Отдельно рассмотрите потерянный ответ после успешной обработки. Не проверяйте повторяемость на реальных платежах, рассылках или рабочих заказах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.