Шпаргалка по curl
curl — самый быстрый способ понять, что реально отдаёт сервер.
Браузер может кэшировать, скрывать детали и автоматически делать лишние запросы. curl показывает базовую правду: статус, заголовки, редиректы, время ответа.
Только заголовки
curl -kI https://getsrv.app/
Полезно для проверки:
- HTTP-кода;
content-type;cache-control;- security headers;
etag;last-modified.
Заголовки без body, но подробнее
curl -kS -D - -o /dev/null https://getsrv.app/
Отличие от -I: это обычный GET, но тело не сохраняется. Иногда полезнее, чем HEAD, потому что некоторые серверы обрабатывают HEAD и GET по-разному.
Следовать редиректам
curl -kIL https://getsrv.app/
Флаги:
-I— только заголовки;-L— следовать редиректам;-k— не останавливать проверку на TLS validation error.
Показать каждый шаг подробнее
curl -kvI https://getsrv.app/
-v показывает:
- куда подключается клиент;
- какой TLS handshake происходит;
- какой HTTP version используется;
- какие заголовки отправлены и получены.
Проверить локальный listener через нужное имя
curl -kI --resolve getsrv.app:7443:127.0.0.1 https://getsrv.app:7443/
Это полезно, когда надо проверить локальный Nginx listener напрямую, но с правильным SNI/Host.
Проверить production через конкретный IP
curl -kI --resolve getsrv.app:443:127.0.0.1 https://getsrv.app/
Замените 127.0.0.1 на нужный IP, если надо проверить конкретный endpoint.
Вывести только код ответа
curl -kS -o /dev/null -w '%{http_code}\n' https://getsrv.app/
Ожидаемо для главной:
200
Для несуществующей страницы:
curl -kS -o /dev/null -w '%{http_code}\n' https://getsrv.app/no-such-page
Ожидаемо:
404
Вывести код, content-type и время
curl -kS -o /dev/null -w 'code=%{http_code} type=%{content_type} time=%{time_total}\n' https://getsrv.app/
Пример:
code=200 type=text/html time=0.064211
Посмотреть детальные тайминги
curl -kS -o /dev/null \
-w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total}\n' \
https://getsrv.app/
Что означает:
dns— время DNS lookup;connect— TCP connect;tls— TLS handshake;first_byte— время до первого байта;total— общее время запроса.
Проверить HTML cache policy
curl -kI https://getsrv.app/ | grep -i cache-control
Ожидаемо:
cache-control: public, must-revalidate
Проверить asset cache policy
ASSET="$(find /var/www/getsrv.app/assets -maxdepth 1 -type f | head -n 1 | sed 's#^/var/www/getsrv.app##')"
curl -kI "https://getsrv.app$ASSET" | grep -i cache-control
Ожидаемо:
cache-control: public, max-age=31536000, immutable
Проверить security headers
curl -kI https://getsrv.app/ \
| grep -Ei 'content-security-policy|x-frame-options|x-content-type-options|referrer-policy|permissions-policy'
Ожидаемо:
x-content-type-options: nosniff
x-frame-options: DENY
referrer-policy: strict-origin-when-cross-origin
permissions-policy: ...
content-security-policy: ...
Сохранить body в файл
curl -ks https://getsrv.app/ -o /tmp/getsrv-home.html
wc -c /tmp/getsrv-home.html
Полезно, если надо сравнить HTML до и после деплоя.
Проверить наличие текста в HTML
curl -ks https://getsrv.app/ \
| grep -oE 'эксплуатации веб-сервисов|С чего начать|Документация' \
| sort -u
Если HTML минифицирован в одну строку, обычный grep -n может вывести всю страницу целиком. Для smoke-test лучше использовать grep -oE.
Типовые флаги
| Флаг | Что делает |
|---|---|
-I | HEAD-запрос, только заголовки |
-L | следовать редиректам |
-k | не прерываться на TLS validation error |
-s | silent mode |
-S | показывать ошибки даже в silent mode |
-v | подробный вывод |
-o /dev/null | не сохранять body |
-D - | вывести response headers |
--resolve | вручную задать IP для имени |
--connect-timeout 5 | лимит времени на подключение |
--max-time 20 | общий лимит времени запроса |
Набор для быстрого smoke-test
curl -kI https://getsrv.app/
curl -kI https://getsrv.app/ru/docs/
curl -kI https://getsrv.app/ru/tools/
curl -kI https://getsrv.app/sitemap-index.xml
curl -kI https://getsrv.app/no-such-page
Ожидаемо:
200
200
200
200
404