Ответ
HTTP GET — это идемпотентный и безопасный метод, предназначенный только для получения (запроса) данных с сервера. Он не должен иметь побочных эффектов, изменяющих состояние сервера.
Ключевые характеристики:
- Безопасность (Safe): Согласно спецификации HTTP, GET не должен изменять состояние сервера. Повторные GET-запросы к одному URI не должны влиять на ресурс.
- Идемпотентность (Idempotent): Многократное выполнение одного и того же GET-запроса даёт идентичный результат.
- Кэшируемость: Ответы на GET-запросы могут и должны кэшироваться браузерами и промежуточными прокси.
- Передача параметров: Параметры передаются в URL-строке запроса (query string) после знака
?.GET /api/search?q=javascript&limit=10 HTTP/1.1 Host: api.example.com
Ограничения и особенности:
- Длина URL: Параметры в query string ограничены по длине. Лимит зависит от браузера и сервера (обычно от 2 до 8 КБ). Для передачи больших объёмов данных следует использовать POST.
- Видимость данных: Параметры видны в адресной строке браузера, истории и логах. Нельзя использовать GET для передачи конфиденциальной информации (паролей, токенов).
- Тип данных: Предназначен для текстовых данных. Передача бинарных данных (файлов) через query string некорректна.
- Закладки и общий доступ: Так как вся информация для выполнения запроса содержится в URL, GET-запросы можно сохранять в закладки и делиться ими.
Правильное использование (REST API): GET используется для операций чтения (Read) в CRUD.
# Получить список пользователей
GET /api/users
# Получить пользователя с id=123
GET /api/users/123
# Отфильтровать пользователей (пагинация и фильтры в query string)
GET /api/users?role=admin&page=2&limit=20
Неправильное использование: Не применяйте GET для операций, которые изменяют данные (создание, удаление, оплата). Для этого существуют методы POST, PUT, DELETE.