Ответ
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.
Ответ 18+ 🔞
А, слушай-ка, про этот ваш GET, ну, классика жанра, блядь! Это как зайти в библиотеку и тихонечко почитать книжку, не сдвигая полки с места, понимаешь? Идемпотентный, безопасный — вся эта хуйня.
Представь себе: ты подходишь к серверу и такой: «Э, дружище, покажи-ка мне, что у тебя там есть». И всё. Ты нихуя не трогаешь, не двигаешь, не переставляешь. Просто смотришь. И можешь смотреть сколько угодно раз — картинка одна и та же будет, ёпта. Это и есть идемпотентность, блядь. Повторил раз, повторил десять — результат как под копирку, пиздец.
А ещё его, сука, можно в кэш засунуть. Браузер или прокси посмотрели один раз — и запомнили, чтобы второй раз не дергать сервер почём зря. Умно, блядь, экономия какая!
Теперь про параметры — тут главное не обосраться. Всё, что ты хочешь спросить, лепи прямо в адресную строку, после этого знака вопроса, сука.
GET /api/search?q=javascript&limit=10 HTTP/1.1
Host: api.example.com
Видишь? q=javascript, limit=10. Всё как на ладони, в рот меня чих-пых! Но и вся подвох тут же, блядь.
Во-первых, длина. Нехуя туда гигабайты не впихнешь! Есть лимит, несколько килобайт, и всё. Хочешь отправить «Войну и мир» — иди нахуй, используй POST, тут не место для романов.
Во-вторых, и это, блядь, самое важное — ВСЁ ВИДНО! Весь твой запрос светится в адресной строке, как ёлочная гирлянда. История браузера, логи сервера — везде останется. Так что если ты, мудак, решил через GET пароль передать… Ну, ты понял. Пиздец твоей безопасности, доверия ебать ноль.
В-третьих, это для текста. Хочешь файл передать? Не-не-не, это не сюда, блядь. Это уже совсем другая история.
Зато, сука, какая прелесть — ссылку можно в закладки бросить или другу скинуть. Всё, что нужно для запроса, прямо в URL, красота!
Как правильно использовать, чтобы не выглядеть долбоёбом? Только для чтения, блядь! В терминах CRUD — буква R (Read).
# Получить список пользователей
GET /api/users
# Получить пользователя с id=123
GET /api/users/123
# Отфильтровать пользователей (пагинация и фильтры в query string)
GET /api/users?role=admin&page=2&limit=20
Вот это — святое. Запрос, фильтрация, пагинация.
А как НЕ НАДО, блядь, чтобы тебя потом не выебали?
НИКОГДА не используй GET, чтобы что-то изменить, создать или удалить! Представь, что поисковый бот прошелся по твоей ссылке /api/orders/delete?id=777 и хуяк — все заказы нахуй! Ёперный театр! Для этого есть POST, PUT, DELETE — вот ими и колдуй.
Короче, запомни: GET — это посмотреть, не трогая. Как музейный экспонат за стеклом. Посмотрел и иди нахуй. Всё.