428
Средняя важность — нужна диагностика

Ошибка 428 — HTTP-статусы

Что это значит

HTTP-статус 428 Precondition Required указывает, что сервер требует от клиента отправить запрос с условными заголовками (например, If-Match, If-None-Match, If-Unmodified-Since). Сервер отклоняет запрос, если такие заголовки отсутствуют. Это предотвращает конфликты при обновлении ресурсов, когда несколько клиентов могут изменять один и тот же объект. Пользователь видит ошибку 428, обычно в браузере или приложении, если клиент не поддерживает условные запросы.

Вероятные причины

  • Клиент не отправил обязательные условные заголовки (If-Match, If-None-Match, If-Unmodified-Since)
  • Сервер настроен требовать условные заголовки для всех запросов на изменение ресурса
  • Используется устаревший или несовместимый HTTP-клиент
  • Прокси-сервер или кэш удалил условные заголовки из запроса
  • Ошибка в конфигурации серверного ПО (например, nginx, Apache)
  • Некорректная реализация REST API, требующая условные заголовки без необходимости
  • Сброс заголовков из-за ошибки в клиентском коде (JavaScript, Python и т.д.)
  • Атака или сканирование, при котором злоумышленник не отправляет условные заголовки

Что делать — по порядку

  1. Проверьте, отправляет ли клиент условные заголовки (If-Match, If-None-Match, If-Unmodified-Since) в запросе
  2. Убедитесь, что клиент поддерживает условные запросы (например, браузеры обычно поддерживают)
  3. Проверьте логи сервера на наличие ошибок, связанных с отсутствием заголовков
  4. Изучите документацию API: требуются ли условные заголовки для данного эндпоинта
  5. Если вы разработчик, добавьте в клиентский код отправку заголовка If-Match с ETag ресурса
  6. Проверьте, не удаляет ли прокси или CDN условные заголовки (например, Cloudflare, Varnish)
  7. Временно отключите требование условных заголовков на сервере для тестирования (если это возможно)
  8. Обновите серверное ПО до последней версии, если ошибка вызвана багом

Нажимайте на пункты, чтобы отмечать выполненные.

Частые вопросы

Что такое условные заголовки?

Это заголовки HTTP, которые позволяют клиенту указать условия, при которых сервер должен выполнить запрос. Например, If-Match проверяет, совпадает ли ETag ресурса.

Почему я получаю 428 в браузере?

Обычно это означает, что сайт или API требует условные заголовки, но ваш браузер их не отправляет. Попробуйте очистить кэш или обновить страницу.

Как исправить 428 на стороне клиента?

Добавьте в запрос заголовок If-Match с текущим ETag ресурса. Если вы не знаете ETag, сначала выполните GET-запрос.

Это ошибка сервера или клиента?

Код 428 — ошибка клиента (4xx). Сервер сообщает, что клиент не выполнил обязательное условие.

Может ли 428 быть вызван кэшем?

Да, если кэш удаляет условные заголовки, сервер может вернуть 428. Проверьте настройки кэширования.

Источники