Чем отличаются GET и POST
Вопрос
Чем отличаются GET и POST? Ответ «у POST есть тело» не засчитывается.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
GET читает и безопасен, POST меняет состояние
GET идемпотентен, POST нет: его нельзя молча повторять
GET кешируется браузером и прокси, POST по умолчанию нет
Параметры GET в URL: попадают в логи и историю, длина ограничена серверами
GET можно добавить в закладки и prefetch, поэтому нельзя менять данные по GET
Что могут спросить следом
- Можно ли отправить тело в GET-запросе?
- Как сделать повтор POST безопасным?
- Почему пароль в query-параметрах это плохо даже с HTTPS?
Разбор
GET предназначен для чтения: он безопасный и идемпотентный, поэтому браузеры, прокси и CDN могут его кешировать и повторять при обрыве, а поисковики спокойно ходят по таким ссылкам. Данные GET идут в URL, значит оседают в логах сервера, истории браузера и заголовке Referer; длину URL ограничивают серверы. POST нужен для создания ресурсов и действий: он не идемпотентен, браузер переспросит перед повторной отправкой формы, а по умолчанию ответы на POST не кешируются. Отсюда правило: никаких изменений данных по GET. Если нужен безопасный повтор POST, клиент присылает Idempotency-Key, а сервер дедуплицирует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Безопасный метод и идемпотентный: разница
Следующий вопрос
Какие статусы отдавать из API