Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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 читает
  • ✗Оба идемпотентны и кэшируются одинаково
  • ✓GET — безопасный идемпотентный запрос на чтение (кэшируем); POST отправляет данные на обработку и не идемпотентен
  • ✗POST можно только из формы, GET — только из JS

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем