HTTP 请求时间问题
ref: https://blog.cloudflare.com/a-question-of-timing/
cURL 调试网络请求, 进行耗时测量
~/.curlrc
-w "DNS 查询耗时: %{time_namelookup} | TCP 连接耗时: %{time_connect} | SSL/TLS 握手耗时: %{time_appconnect} | 请求准备耗时: %{time_pretransfer} | 首字节等待耗时: %{time_starttransfer} | 总请求耗时: %{time_total} | 下载大小: %{size_download}\n"
-w
选项用于在请求完成后输出特定的信息。 %{variable_name}
会被 curl 替换为相应的值。
单位是 s
%{time_namelookup}
DNS 查询耗时。%{time_connect}
TCP 连接耗时(三次握手)%{time_appconnect}
SSL/TLS 握手耗时%{time_pretransfer}
请求准备耗时%{time_starttransfer}
首字节等待耗时%{time_total}
总请求耗时%{size_download}
下载大小
curl -so /dev/null https://www.zasag.mn
如果 time_namelookup 耗时较长,可以使用 --resolve www.zasag.mn:103.87.69.128
来排除 DNS 解析性能的影响。
Timing with Chrome
Stalled, 阻塞阶段,从 fetchStart 到 domianLookupStart 的阶段,浏览器存在更高优先级的请求、需要分配磁盘缓存空间或当前主机已有 6 个连接处于打开状态。
Initial connection, 从 connectStart 到 connectEnd 的阶段。(TCP 三次握手 + SSL 交互证书)。
Request send, connectEnd 到 requestStart 的阶段。