Что такое HTTP-метод GET?

«Что такое HTTP-метод GET?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GET — это один из основных HTTP-методов, используемый для запроса данных с указанного ресурса (сервера). С точки зрения DevOps и проектирования API, его ключевая характеристика — идемпотентность и безопасность: многократные идентичные GET-запросы не должны изменять состояние сервера.

Основные характеристики и использование в контексте инфраструктуры:

  • Передача параметров: Параметры запроса передаются в URL после знака ? в виде пар ключ=значение, разделенных & (например, /api/users?role=admin&active=true).
  • Кэширование: Ответы на GET-запросы могут и должны кэшироваться на различных уровнях (браузер, CDN, прокси-серверы), что критически важно для производительности веб-приложений.
  • Ограничения: Длина URL ограничена (зависит от браузера и сервера, обычно несколько тысяч символов), поэтому для передачи больших объемов данных GET не подходит.
  • Видимость: Параметры видны в истории браузера, логах сервера и прокси, поэтому НИКОГДА не следует использовать GET для передачи чувствительной информации (паролей, токенов).

Примеры использования в DevOps-практике:

  1. Проверка здоровья эндпоинта (healthcheck) сервиса или балансировщика нагрузки:
    curl -X GET http://app-backend:8080/health
    # Ожидаемый ответ: 200 OK с телом {"status": "healthy"}
  2. Запрос метрик из системы мониторинга (Prometheus API):
    curl -G 'http://prometheus:9090/api/v1/query' 
      --data-urlencode 'query=up{job="nginx"}' 
      --data-urlencode 'time=2023-10-01T14:00:00Z'
  3. Извлечение информации из инфраструктурного API (например, Consul для обнаружения сервисов):
    curl http://consul-server:8500/v1/catalog/service/web-api

Контраст с POST: В то время как GET получает данные, метод POST используется для отправки данных, которые могут изменить состояние сервера (создание нового ресурса, запуск операции). Для идемпотентных операций обновления используется PUT, а для удаления — DELETE.