When curl -v is not enough
curl -v prints headers and stops there, which is not enough for TLS failures, odd HTTP/2 frames, or body parsing problems.
curl --trace - --trace-time https://example.com/
curl --trace-ascii out.txt https://example.com/
--trace - writes the raw bytes in both directions, the SSL handshake details and HTTP/2 frames, and --trace-time stamps every line so you can see which step stalls.
For timeouts, add:
--connect-timeout 5 --max-time 20 -w '%{time_namelookup} %{time_connect} %{time_appconnect} %{time_starttransfer}\n'
time_appconnect marks the end of the TLS handshake; the gap from time_connect is the handshake itself. A slow handshake usually means an oversized chain or a stalled OCSP fetch.