Проверяет понимание семантики HTTP-методов и того, почему GET должен быть безопасным и идемпотентным, а также какие последствия бывают при нарушении этого правила.
HTTP-метод GET по спецификации (RFC 9110) относится к так называемым безопасным (safe) методам. Это означает, что клиент, вызывая GET, не запрашивает изменение состояния на сервере — он лишь хочет получить представление ресурса. При этом сам протокол не содержит механизма, который бы физически запретил серверу что-то записать в базу при обработке GET. То есть технически это возможно, но семантически неправильно.
Классический антипаттерн — удаление сущности через GET-ссылку:
// Плохо: GET меняет состояние
app.get('/users/:id/delete', async (req, res) => {
await db.users.delete({ id: req.params.id });
res.redirect('/users');
});
// Правильно: используем DELETE или POST
app.delete('/users/:id', async (req, res) => {
await db.users.delete({ id: req.params.id });
res.status(204).end();
});Иногда GET используют для «мягких» побочных эффектов: логирование обращения, инкремент счётчика просмотров, обновление времени последнего визита. Формально это тоже нарушение, но оно считается допустимым компромиссом, если эффект идемпотентен и не критичен. Всё, что реально меняет бизнес-данные, должно идти через POST, PUT, PATCH или DELETE.
Итог: технически изменять данные в GET можно, но не нужно. Для любых операций, меняющих состояние, применяйте POST, PUT, PATCH или DELETE — это сохранит корректную работу кэшей, краулеров и защитит от случайных и CSRF-изменений.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
Networks
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию