Суть конфликта
Код 409 означает, что сам по себе запрос понятен и допустим, но выполнить его нельзя из-за текущего состояния ресурса на сервере. Типичные примеры: создать запись с именем, которое уже занято, изменить документ, который тем временем поправил кто-то другой, удалить каталог, где ещё остались вложенные элементы.
В отличие от 400, здесь нет синтаксической ошибки, а в отличие от 403 нет вопроса прав. Проблема именно в столкновении вашего действия с тем, что уже существует. Хорошо построенный сервер в теле ответа поясняет, в чём конкретно конфликт, и иногда предлагает, как его разрешить.
Где 409 встречается чаще всего
Первое место занимают системы хранения и совместной работы: облачные диски, вики, репозитории, менеджеры задач. Одновременное редактирование одного объекта двумя людьми или двумя вкладками вполне может закончиться 409.
Второе место — регистрация и создание объектов: имя пользователя, адрес почты, домен, название проекта уже используются. Третье — программные интерфейсы, где применяют проверку версий: клиент присылает номер версии, а на сервере уже более новая. Четвёртое — повторная отправка формы или ретрай запроса, когда первая попытка на самом деле сработала, и второй запрос упирается в уже созданный объект.
Как разобраться в сообщении
Если в ответе есть текст, прочтите его внимательно: он обычно называет поле или объект. Откройте вкладку сети в инструментах разработчика браузера, найдите запрос с кодом 409 и посмотрите тело ответа. Там часто есть подробность, которую интерфейс сайта не показал.
Затем проверьте, не существует ли уже такой объект: обновите список, посмотрите корзину и архив, поищите по названию. Если работали в нескольких вкладках или на нескольких устройствах, закройте лишние и загрузите свежую версию данных.
Что делать пользователю
Обновите страницу, чтобы получить актуальное состояние, и повторите действие с другим именем или после сохранения чужих правок. Если конфликт возникает при синхронизации, дайте программе завершить текущий цикл, а не запускайте вторую параллельную операцию. При правках документа сохраните свой текст отдельно, загрузите свежую версию и внесите изменения заново или через объединение версий, если сервис такое предлагает.
Если ничего не помогает, сообщите в поддержку сервиса точное время ошибки и действие, которое вы выполняли.
Как повторять запросы без новых конфликтов
Если вы пользуетесь программным интерфейсом или автоматизацией, полезно понимать, что 409 не лечится простым повтором того же запроса: состояние ресурса не изменится само по себе. Сначала нужно получить свежие данные и заново принять решение: перезаписать, объединить, выбрать другое имя или считать операцию уже выполненной.
Особенно осторожно обращайтесь с повторами после обрыва связи. Иногда первый запрос дошёл и выполнился, но ответ потерялся, и повтор упирается в 409 как в дубликат. В такой ситуации правильнее проверить, существует ли объект, чем пытаться создавать его снова.
Для сценариев с совместным редактированием помогают короткие циклы: загрузить, изменить, отправить с номером версии, при конфликте загрузить снова. Такой подход не теряет чужие правки и не оставляет вас с непонятной ошибкой.
Для разработчика
Возвращайте 409 только при настоящем конфликте состояния и всегда добавляйте машинно-читаемое описание причины. Для идемпотентных операций продумайте повтор: клиент должен различать «уже создано мной» и «занято другим». Для конкурентных правок используйте номера версий или условные заголовки и давайте клиенту способ получить актуальное состояние.
Хорошим тоном считается возвращать вместе с 409 описание конфликта и, если возможно, ссылку на конфликтующий объект или текущую версию ресурса. Клиент получает шанс автоматически разрешить ситуацию: например, показать пользователю различия и предложить объединить правки. Не используйте 409 как универсальный отказ: для ошибок прав и формата есть более подходящие коды, и путаница затрудняет отладку.