Каковы характеристики и ограничения HTTP-метода GET?

«Каковы характеристики и ограничения HTTP-метода GET?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP GET — это идемпотентный и безопасный метод, предназначенный только для получения (запроса) данных с сервера. Он не должен иметь побочных эффектов, изменяющих состояние сервера.

Ключевые характеристики:

  1. Безопасность (Safe): Согласно спецификации HTTP, GET не должен изменять состояние сервера. Повторные GET-запросы к одному URI не должны влиять на ресурс.
  2. Идемпотентность (Idempotent): Многократное выполнение одного и того же GET-запроса даёт идентичный результат.
  3. Кэшируемость: Ответы на GET-запросы могут и должны кэшироваться браузерами и промежуточными прокси.
  4. Передача параметров: Параметры передаются в 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.