#Что означает проблема и как её распознать
HTTP 428 Precondition Required означает, что сервер отказывается изменять ресурс без условия, подтверждающего актуальную версию. Обычно необходимо получить ETag ресурса и указать If-Match; это защищает от случайной перезаписи чужих изменений.
#Основные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Клиент не передал If-MatchСервер требует условный запрос, но клиент его не отправил. | В заголовках PUT/PATCH отсутствует If-Match; ответ 428. | Добавить получение версии перед обновлением. |
| Отправлен неправильный тип условияПриложение использует не подходящий серверу заголовок. | 428 появляется, хотя клиент считает запрос «условным». | Проверить договорённость API и тип ETag. |
| Прокси удаляет заголовокНа клиенте условие есть, на сервер его не передают. | Различается журнал до и после посредника. | Проверить конфигурацию прокси без снятия защиты. |
#Пошаговая диагностика и устранение
- Сохраните данные, которые пытались отправитьЕсли редактор показывает 428, не обновляйте страницу прежде, чем скопируете несохранённый текст в отдельный документ. Статус не означает, что файл испорчен; сервер обычно отклонил изменение, поскольку не выполнено требование к условиям. Не повторяйте запрос в надежде, что вторая попытка пройдёт случайно.
- Посмотрите требование сервераОткройте подробности ошибки в клиенте API или в Chrome нажмите F12 → Network → выберите неуспешный запрос → Response и Headers. Часто сервер сообщает, какое условие ему нужно, например If-Match. Сохраните только метод, URL, код и текст требования; исключите токены. Если интерфейс не даёт просматривать HTTP, обратитесь в поддержку приложения с кодом 428.
- Получите текущую версию ресурсаВ интерфейсе приложения нажмите «Открыть заново»/«Обновить», предварительно сохранив локальный черновик. Для разработчика выполните документированную безопасную операцию чтения GET и найдите ETag в ответе. Не используйте ETag другого файла, старой копии или соседней среды. При отсутствии ETag уточните у разработчика API допустимый механизм предварительного условия.
- Сохраните с корректным условиемЕсли используете готовый редактор с поддержкой версий, повторно примените правки к новой версии и сохраните штатно; заголовки сформирует сам клиент. Разработчик должен передавать If-Match с сильной текущей ETag при изменении конкретного ресурса. Не подставляйте If-Match: * по умолчанию: это проверяет лишь существование объекта, а не совпадение версии. Если после получения ETag виден 412, версия успела измениться — требуется сравнение и объединение.
- Проверьте результат на тестовом файлеСоздайте неважный тестовый ресурс и убедитесь, что запрос без условия даёт 428, а с текущим разрешённым условием выполняется. Затем измените ресурс во втором клиенте и проверьте, что устаревшее условие не приводит к незаметной перезаписи. Если требование продолжает нарушаться, сравните заголовки клиента, прокси и сервера и откатите только тестовые изменения.
#Как проверить результат и что делать, если не помогло
Условный запрос проходит при актуальной версии и корректно предотвращает потерю чужих правок при устаревшей. Если сервер продолжает возвращать 428, попросите поддержку сообщить обязательный заголовок и допустимые версии клиента.