Ошибка 415: почему не удалялась запись
Библиотекарь создал запись по ISBN, попробовал её удалить — и получил «HTTP 415: Ожидается JSON». Разбираем, как защитное правило сломало удаление и почему исправлять нужно правило, а не исключение.
В этой рубрике мы честно рассказываем о сбоях. Не потому, что их много, а потому, что на ошибках лучше всего видно, как устроена система.

Что увидел библиотекарь
Запись «Flucht – Vertreibung – Neuanfang» создана через новую функцию поиска описания по ISBN. Всё подтянулось правильно. Затем — удаление с двойным подтверждением: первое окно, кнопка «Продолжить к подтверждению» и красная строка внизу: HTTP 415 : Ожидается JSON.
Что произошло на самом деле
Незадолго до этого сервер получил дополнительную защиту. Одно из правил звучало разумно: каждый запрос, который что-то меняет, должен приходить в формате JSON. Это закрывает целый класс атак, когда чужой сайт пытается отправить форму от имени вошедшего пользователя.
Но у некоторых действий вообще нет данных. Удаление записи отправляет только «удалить запись № …» — без тела запроса. Для таких случаев в правиле был список исключений: выход из системы, удаление пользователя, загрузка логотипа. Удаление записи в список не попало.
Почему не надо просто добавить исключение
Самое быстрое исправление — дописать удаление записи в список. Но это чинит симптом. Такие же запросы без данных есть у восстановления из корзины, окончательного удаления, «Снять бронь», «Вернуть на полку». Каждое новое действие становилось бы новой ловушкой.
Правильное исправление — изменить само правило: требовать JSON только тогда, когда запрос действительно передаёт данные. Защиту это не ослабляет: запросы без данных по-прежнему проверяются по источнику и по защитному коду, который знает только открытая вкладка самого сайта.
Что мы попросили сделать
- Изменить правило в общем видеJSON обязателен, только если у запроса есть тело. Список исключений больше не нужен.
- Пройти по всем изменяющим действиямУдаление, корзина, заказы, продления, пароли, импорт, поля — для каждого автоматический тест.
- Проверить рукамиСоздать тестовую запись, удалить, найти в корзине, восстановить, удалить снова.
Урок
Защитные правила тоже нужно тестировать на реальных действиях пользователя, а не только на атаках. Ошибку нашёл не тест, а библиотекарь, который просто работал с системой. Поэтому в Katlog мы и тестируем на живых сценариях: создать, удалить, восстановить.
Эпилог
После исправления та самая запись «Flucht – Vertreibung – Neuanfang» удалилась без единой ошибки и теперь лежит в корзине: её можно восстановить в течение 30 дней. Проверка на живом сайте закрыла историю, которая с него и началась.