Files
http-latency-prober/docs/usage/step-2-phase-breakdown.md
Jan Novak 0ecfb9bb1a feat(go): step 2 — per-phase request breakdown via httptrace
Instruments HTTP requests with net/http/httptrace.ClientTrace to capture
timestamps for DNS, TCP connect, TLS handshake, TTFB, and body transfer.
TLS row is omitted automatically for plain http:// URLs. Output is an
aligned text table with a separator before the Total row.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 00:23:36 +02:00

2.2 KiB

Step 2 — Per-Phase Breakdown

What this step delivers

latprobe now shows a full breakdown of every phase of an HTTP request:

Phase What it measures
DNS lookup Time to resolve the hostname (DNSStartDNSDone)
TCP connect Time to establish the TCP connection (ConnectStartConnectDone)
TLS handshake Time to complete TLS negotiation — HTTPS only (TLSHandshakeStartTLSHandshakeDone)
Server (TTFB) Time from request sent to first response byte (WroteRequestGotFirstResponseByte)
Transfer Time to download the response body (GotFirstResponseByte → body closed)
Total Wall-clock time for the entire request

The TLS row is omitted automatically for plain http:// URLs.

Implemented via net/http/httptrace.ClientTrace — stdlib only, no external dependencies.

Build

cd go
go build -o latprobe .

Usage

latprobe <url> [url ...]

Examples

HTTPS (all phases present)

$ ./latprobe https://example.com
https://example.com  (200)
  DNS lookup     :     18.21 ms
  TCP connect    :     10.12 ms
  TLS handshake  :     36.11 ms
  Server (TTFB)  :     21.95 ms
  Transfer       :      0.18 ms
  ─────────────────────────────
  Total          :     88.00 ms

HTTP (TLS row omitted)

$ ./latprobe http://example.com
http://example.com  (200)
  DNS lookup     :      1.64 ms
  TCP connect    :      9.29 ms
  Server (TTFB)  :     17.96 ms
  Transfer       :      0.07 ms
  ─────────────────────────────
  Total          :     29.56 ms

Multiple URLs

$ ./latprobe https://example.com https://www.google.com
https://example.com  (200)
  DNS lookup     :     18.21 ms
  ...

https://www.google.com  (200)
  DNS lookup     :      7.15 ms
  ...

Notes

  • DNS absent on repeat connections: when the OS has cached the DNS result, the DNS phase may be very short or absent. This is expected.
  • Phases don't always sum exactly to Total: the trace hooks introduce negligible overhead between events; the difference is typically < 1 ms.