适用于 curl 7.61+。先确认版本,并从与应用相同的网络出口访问一个允许探测的地址;示例 URL 要替换,认证信息不要直接写进命令或贴到输出里。
curl --version
curl -sS -o /dev/null \
--connect-timeout 5 --max-time 30 \
-w 'remote_ip=%{remote_ip}\nhttp_code=%{http_code}\ndns=%{time_namelookup}\ntcp=%{time_connect}\ntls=%{time_appconnect}\npretransfer=%{time_pretransfer}\nttfb=%{time_starttransfer}\ntotal=%{time_total}\n' \
https://example.com/health
这些时间都是从请求开始累计的,不是每段独立耗时。TCP 建连大约是 time_connect - time_namelookup,TLS 握手大约是 time_appconnect - time_connect,请求发出到首字节大约看 time_starttransfer - time_pretransfer。HTTP 地址没有 TLS 时,time_appconnect 通常为 0。
DNS 明显慢,可以在确认目标 IP 后用 --resolve 'example.com:443:IP' 做一次对照;IPv4、IPv6 路径有差异时分别用 -4、-6 对照。不要用 -k 把证书问题掩盖掉。若加了 -L 跟随跳转,还应输出 %{num_redirects} 和 %{time_redirect},否则中间跳转会让首字节时间不好解释。
至少连续采几次,并同时记录 UTC 时间、目标主机、HTTP 状态码和最终 IP。修复后用同一出口、同一 URL 和相同超时参数复测,确认慢的那一段下降,而不是只看单次 total。