跳到主要内容

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 的阶段。