Ответ
| Критерий | 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 — для создания/изменения.