#Что означает проблема и как её распознать
HTTP 412 Precondition Failed при сохранении по ETag означает, что условие If-Match или другое условие запроса оказалось ложным. Частая причина — документ успел изменить другой редактор; повторять запись без сверки версий опасно.
#Основные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Изменилась версия документаКлиент отправил старый ETag в If-Match. | После открытия документа другим участником сохранение первого клиента даёт 412. | Получить новую версию и совместить правки. |
| Клиент использует неверный ETagЗаголовок взят из кеша либо принадлежит другой версии/адресу. | GET возвращает один ETag, запрос изменения передаёт другой. | Исправить хранение метки версии в клиенте. |
| Условия заданы неправильноКлиент отправляет лишние If-Match/If-Unmodified-Since. | Сервер отклоняет запрос даже без параллельного редактирования. | Сверить алгоритм клиента с документацией API. |
#Пошаговая диагностика и устранение
- Не отправляйте сохранение повторно вслепуюЕсли редактор показал 412, скопируйте свой несохранённый текст в отдельный локальный документ: Ctrl+A → Ctrl+C в поле редактора, вставьте в Блокнот/текстовый редактор и сохраните файл на ПК. Не обновляйте страницу до создания копии. Обычная перезагрузка может потерять черновик, а принудительное сохранение — перезаписать чужую работу.
- Проверьте, что ответ действительно 412В Chrome нажмите F12 → «Сеть» (Network), включите Preserve log, повторите действие «Сохранить» только если уверены, что оно безопасно и не создаёт второй заказ/платёж. Выберите запрос PUT/PATCH из списка и найдите Status Code 412; в Request Headers посмотрите If-Match и его значение. Не выкладывайте общедоступно заголовки Authorization или Cookie. Если это обычная программа, сохраните её журнал ошибок и обратитесь к поддержке.
- Сравните версию документа на сервереОткройте документ заново во второй вкладке или используйте кнопку «Обновить», «История версий» в сервисе, не теряя локальную копию. Если виден другой текст и отметка о новом редакторе, перед вами конфликт версий. Если поддерживается история, зафиксируйте время последней версии. Не подменяйте ETag вручную в неподдерживаемом интерфейсе.
- Согласуйте изменения без перезаписиСравните сохранённый локально текст с актуальным документом и перенесите нужные фрагменты в новую версию. При совместной работе сначала согласуйте изменения с другим участником. Если сервис предлагает «Объединить изменения», используйте просмотр различий и сохраните итог. Если такой функции нет, создайте копию документа под новым именем и попросите владельца выполнить объединение.
- Разработчику: исправьте условное обновлениеВ контролируемой тестовой среде выполните безопасный GET нужного ресурса, прочитайте ETag из ответа, затем убедитесь, что клиент отправляет именно этот ETag в If-Match при обновлении той же версии. Слабые метки с префиксом W/ для If-Match не подходят; нужна сильная проверка совпадения. После успешной операции заново получите ETag. При повторной 412 показывайте пользователю сравнение версий, а не автоматически посылайте запрос без If-Match.
#Как проверить результат и что делать, если не помогло
После согласования версий сохранение завершается успешным кодом, повторное открытие документа показывает обе согласованные правки. Если 412 повторяется на новой версии без параллельных правок, передайте поддержке обезличенные время, адрес метода и заголовки условий без секретов.