以下是我在测量 HTTP 请求为何花费太长时间时经常使用的命令:
curl -L -w "time_namelookup: %{time_namelookup}
time_connect: %{time_connect}
time_appconnect: %{time_appconnect}
time_pretransfer: %{time_pretransfer}
time_redirect: %{time_redirect}
time_starttransfer: %{time_starttransfer}
time_total: %{time_total}
" https://example.com/
这是以单行方式编写的相同命令,以便我将来需要时可以通过三次单击轻松地从该页面复制它:
curl -L -w "time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_appconnect: %{time_appconnect}\ntime_pretransfer: %{time_pretransfer}\ntime_redirect: %{time_redirect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" https://example.com/
上述命令的输出通常如下所示:
$ curl -L -w "namelookup: %{time_namelookup}\nconnect: %{time_connect}\nappconnect: %{time_appconnect}\npretransfer: %{time_pretransfer}\nstarttransfer: %{time_starttransfer}\ntotal: %{time_total}\n" https://example.com/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
...
</html>
time_namelookup: 0.001403
time_connect: 0.245464
time_appconnect: 0.757656
time_pretransfer: 0.757823
time_redirect: 0.000000
time_starttransfer: 0.982111
time_total: 0.982326
在上面的输出中,为了简洁起见,我省略了大部分 HTML 输出,并用省略号替换了省略的部分。
下面的列表提供了上面输出中每个数字的描述。此信息直接从curl 7.20.0 的手册页中选取。详细信息如下:
time_namelookup:从开始到名称解析完成所花费的时间(以秒为单位)。
time_connect:从开始到完成与远程主机(或代理)的 TCP 连接所花费的时间(以秒为单位)。
time_appconnect:从开始到完成与远程主机的 SSL/SSH/etc 连接/握手所花费的时间(以秒为单位)。(7.19.0 中添加)
time_pretransfer:从开始到文件传输即将开始所花费的时间(以秒为单位)。这包括特定于所涉及的特定协议的所有预传输命令和协商。
time_redirect:在最终事务开始之前,所有重定向步骤(包括名称查找、连接、预传输和传输)所花费的时间(以秒为单位)。time_redirect 显示多个重定向的完整执行时间。(在7.12.3中添加)
time_starttransfer:从开始到第一个字节即将传输所花费的时间(以秒为单位)。这包括 time_pretransfer 以及服务器计算结果所需的时间。
time_total:完整操作持续的总时间(以秒为单位)。时间将以毫秒分辨率显示。
这里值得注意的一件重要事情是,time_appconnect和time_connect时间的数字差异告诉我们在SSL / TLS握手中花费了多少时间。对于没有 SSL/TLS 的明文连接,time_appconnect报告为零。下面是一个演示这一点的示例输出:
$ curl -L -w "time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_appconnect: %{time_appconnect}\ntime_pretransfer: %{time_pretransfer}\ntime_redirect: %{time_redirect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" http://example.com/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
...
</html>
time_namelookup: 0.001507
time_connect: 0.247032
time_appconnect: 0.000000
time_pretransfer: 0.247122
time_redirect: 0.000000
time_starttransfer: 0.512645
time_total: 0.512853
另请注意,上述两个输出中的time_redirect均为零。这是因为在访问 example.com 时不会发生重定向。下面是另一个示例,该示例显示了发生重定向时输出的输出:
$ curl -L -w "time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_appconnect: %{time_appconnect}\ntime_pretransfer: %{time_pretransfer}\ntime_redirect: %{time_redirect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" https://susam.net/blog
<!DOCTYPE HTML>
<html>
...
</html>
time_namelookup: 0.001886
time_connect: 0.152445
time_appconnect: 0.465326
time_pretransfer: 0.465413
time_redirect: 0.614289
time_starttransfer: 0.763997
time_total: 0.765413
当遇到 Web 服务中的潜在延迟问题时,这通常是我从多个客户端多次运行的第一个命令之一,因为此命令的结果有助于快速了解可能导致延迟问题的层。
以上就是用curl检测http请求为何时间长?的详细内容,更多请关注全栈开发网其它相关文章!
上一篇:没有了
下一篇:第三方Cookie是什么?