В чем разница между HTTP-методами GET и POST?

«В чем разница между HTTP-методами GET и POST?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Критерий GET POST
Назначение Получение данных с сервера. Отправка данных на сервер (часто для создания или изменения).
Данные Параметры передаются в URL (строке запроса): ?key=value&... Данные передаются в теле запроса (тело может быть любого формата: JSON, XML, form-data).
Видимость Параметры видны в адресной строке браузера. Параметры скрыты в теле запроса.
Кэширование Может кэшироваться браузером и прокси-серверами. Не кэшируется по умолчанию.
Безопасность Менее безопасен для конфиденциальных данных (логины, пароли). Более безопасен (но для полной защиты нужен HTTPS).
Идемпотентность Идемпотентен: многократный вызов не изменяет состояние сервера. Не идемпотентен: повторный вызов может создать дубликаты ресурсов.
Ограничения Ограничение длины URL (~2048 символов). Нет жестких ограничений на размер тела.

Практический пример (создание пользователя):

// НЕПРАВИЛЬНО: Использовать GET для операций, изменяющих состояние
// GET /api/users?name=John&email=john@example.com

// ПРАВИЛЬНО: Использовать POST
// POST /api/users
// Тело запроса (JSON): {"name": "John", "email": "john@example.com"}

Основное правило: GET — для чтения, POST — для создания/изменения.