Почему удаление данных через HTTP GET-запрос является плохой практикой?

«Почему удаление данных через HTTP GET-запрос является плохой практикой?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, использовать метод GET для удаления данных категорически не рекомендуется. Это нарушает семантику HTTP (RFC 7231), согласно которой GET должен быть идемпотентным и безопасным (safe), то есть не менять состояние сервера.

Почему это плохая практика:

  1. Нарушение стандартов: Для удаления ресурса существует специальный метод DELETE.
  2. Угрозы безопасности:
    • GET-запросы кэшируются прокси и браузерами.
    • Они остаются в истории браузера и логах сервера.
    • Ссылки с действием "удалить" могут быть случайно открыты поисковым роботом или предзагружены браузером.
  3. Проблемы с RESTful-архитектурой: Такая реализация ломает принципы REST, усложняя понимание API.

Пример правильной и неправильной реализации:

// ✅ ПРАВИЛЬНО: Использование метода DELETE
DELETE /api/users/123 HTTP/1.1
Host: example.com
Authorization: Bearer <token>
// ❌ ОПАСНО И НЕПРАВИЛЬНО: Удаление через GET
GET /api/users/delete?id=123 HTTP/1.1
Host: example.com

Вывод: Всегда используйте семантически верные HTTP-методы: POST для создания, PUT/PATCH для обновления, DELETE для удаления.