Чем отличаются методы GET и POST?
GET передаёт данные серверу через URL (в строке запроса), а POST — через тело HTTP-запроса. Это определяет ключевые различия в видимости, размере и назначении каждого метода.
| Характеристика | GET | POST |
|---|---|---|
| Передача данных | В URL (query string) | В теле запроса |
| Видимость | Параметры видны в адресной строке | Параметры скрыты от пользователя |
| Ограничение размера | ~2 КБ (зависит от браузера/сервера) | Ограничен настройками сервера (~2+ МБ) |
| Кэширование | Кэшируется браузером и прокси | Не кэшируется по умолчанию |
| Закладки | Можно сохранить в закладки | Нельзя сохранить в закладки |
| Идемпотентность | Идемпотентный (повторный вызов не меняет состояние) | Не идемпотентный |
| Назначение | Получение данных | Отправка/изменение данных |
| История браузера | Сохраняется | Не сохраняется |
GET предназначен для запросов, которые не изменяют состояние сервера (чтение, поиск, фильтрация). POST — для операций, которые создают или изменяют данные (отправка форм, загрузка файлов, создание записей).
Передача данных методом POST более безопасна, чем GET, так как секретные данные (например, пароль) не отображаются в URL, который виден в адресной строке, истории браузера и логах сервера. Однако POST не является шифрованием — для настоящей защиты нужен HTTPS.
На собеседовании: обязательно упомяните идемпотентность: GET — идемпотентный (безопасно повторять), POST — нет. Это фундаментальное отличие с точки зрения REST. Частая ошибка — говорить, что POST «безопасный» — он лишь скрывает данные из URL, но без HTTPS они по-прежнему передаются открыто.