Ответ вслух Junior HTTP: методы, статусы, заголовки спрашивают часто обновлено

Чем отличаются GET и POST

Вопрос

Чем отличаются GET и POST? Ответ «у POST есть тело» не засчитывается.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

GET предназначен для чтения: он безопасный и идемпотентный, поэтому браузеры, прокси и CDN могут его кешировать и повторять при обрыве, а поисковики спокойно ходят по таким ссылкам. Данные GET идут в URL, значит оседают в логах сервера, истории браузера и заголовке Referer; длину URL ограничивают серверы.

Что должно прозвучать в ответе

  • 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 ошибок.