Вопрос с собеседования · Spring

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

JuniorSpring MVC и RESTSpring
Ещё спрашивают так:
  • Когда использовать GET, а когда POST?
Коротко

GET — получить ресурс: безопасный (не меняет состояние) и идемпотентный, параметры в URL, ответ кэшируется. POST — отправить данные на обработку или создать ресурс: не идемпотентный, данные в теле.

  • GET можно повторять, сохранять в закладки, кэшировать, предзагружать
  • Тело GET серверы и прокси игнорируют — на него не полагаются
  • Секретные параметры — не в URL: попадают в логи и историю

А ещё Для изменения — PUT, PATCH, DELETE; POST — для создания и «действий»

Подробно

GET:

  • читает представление ресурса и не должен менять состояние сервера;
  • параметры — в пути и строке запроса (/orders?status=paid);
  • идемпотентен: браузеры, прокси и клиенты повторяют и предзагружают GET;
  • кэшируется по заголовкам Cache-Control и ETag.

POST:

  • отправляет данные в теле (JSON, форма, файл);
  • создаёт ресурс (201 Created + Location) или выполняет действие (POST /orders/42/cancel);
  • не идемпотентен: два запроса — два заказа; для безопасных повторов — ключ идемпотентности;
  • по умолчанию не кэшируется.

Ошибки на практике: изменение данных в GET (ссылку «удалить» из письма открыл антивирус или предзагрузка); пароль или токен в строке запроса — оказывается в логах сервера, прокси и истории браузера.

В Spring: @GetMapping, @PostMapping; параметры GET — @RequestParam, @PathVariable; тело POST — @RequestBody.

Что хотят услышать

  • Безопасность и идемпотентность GET, отсутствие их у POST.
  • Где передаются данные, кэширование.
  • Практические ошибки.

Частые ошибки

  • Менять состояние в GET.
  • Передавать секреты в URL.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗GET изменяет данные на сервере, а POST только читает их и кэшируется
  • ✗Оба идемпотентны и кэшируются одинаково
  • ✗POST можно отправить только из HTML-формы, а GET — только из JavaScript
  • ✓GET — безопасное идемпотентное чтение; POST передаёт данные, не идемпотентен

Что спросят дальше

  • Чем PUT отличается от PATCH?
  • Что значит idempotent?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования