Ответ
Команда curl example.com инициирует процесс получения главной страницы сайта по HTTP. Вот что происходит под капотом с точки зрения DevOps-инструментов и сетей:
-
Разрешение DNS:
curlзапрашивает у системы разрешение имениexample.comв IP-адрес.- Происходит проверка локального кеша (
/etc/hosts,systemd-resolved), затем запрос к DNS-серверам из/etc/resolv.conf. - Можно отследить:
dig example.comилиnslookup example.com.
-
Установка TCP-соединения (SYN, SYN-ACK, ACK):
curl(клиент) отправляет TCP SYN пакет на полученный IP-адрес, порт 80 (HTTP).- Если на пути есть файрвол (iptables, nftables, облачные Security Groups), он проверяет правило на исходящий трафик.
- Можно симулировать проверку доступности порта утилитой
nc(netcat):nc -zv example.com 80.
-
Отправка HTTP-запроса:
- После установки TCP-сессии
curlотправляет HTTP/1.1 GET запрос:GET / HTTP/1.1 Host: example.com User-Agent: curl/7.68.0 Accept: */*
- После установки TCP-сессии
-
Получение и обработка ответа:
- Сервер отвечает HTTP-статусом (например,
200 OK) и телом HTML. curlпо умолчанию выводит полученное тело ответа в stdout.
- Сервер отвечает HTTP-статусом (например,
DevOps-перспектива и отладка:
В реальной работе я редко использую curl просто так. Чаще с флагами для отладки API, проверки здоровья сервисов или диагностики проблем в продакшене.
-
Проверка здоровья endpoint'а в Kubernetes:
# В поде или как часть liveness-пробы curl -f -s -o /dev/null -w "%{http_code}n" http://localhost:8080/health # Возвращает только код статуса. Код >400 приведет к exit code !=0 -
Диагностика проблем с балансировщиком или ingress-контроллером:
# Следим за заголовками, чтобы увидеть, через какой сервис/под прошел запрос curl -v -H "Host: my-app.example.com" http://<INGRESS_IP>/ # В выводе ищем заголовки вроде `X-Served-By` или `upstream_addr` -
Базовый нагрузочный тест (для быстрой проверки):
# 100 запросов с 10 параллельными потоками curl -s "http://example.com/" | wrk -t10 -c100 -d10s
Таким образом, curl — это не просто команда для скачивания страниц, а основной инструмент для взаимодействия с HTTP-сервисами, их тестирования и отладки в инфраструктуре.