用Curl计算服务器处理时间

Jon*_*nah 17 curl http

我正在使用的卷曲请求时序信息--write-out所描述的选项,在这篇文章中.

以下是我的一个请求的示例输出:

        time_namelookup:  0.031
           time_connect:  0.328
        time_appconnect:  1.560
       time_pretransfer:  1.560
          time_redirect:  0.000
     time_starttransfer:  1.903
                        ----------
             time_total:  2.075
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何确定服务器处理请求的时间?答案是:

time_starttransfer - time-connect
Run Code Online (Sandbox Code Playgroud)

也就是说,从建立连接到服务器开始发送响应的时间?这似乎是正确的,但我想确定.

有关curl时序变量的详细信息,请访问:http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html

Dan*_*erg 14

是的,(time_starttransfer - time-connect)是从curl注意到连接到第一个字节到达的时间.请注意,它还包括传输时间,因此对于远程站点来说,它会因此而变长.

  • 回复:“它还包括转移时间”-哪个转移时间?请求转移?还是响应传输?或两者?curl 联机帮助页不清楚。例如,对于 time_pretransfer,它表示“从开始到文件传输即将开始所花费的时间(以秒为单位)。这包括特定于特定协议的所有预传输命令和协商涉及。” 什么文件传输?请求或响应?什么是“文件”? (3认同)

Sai*_*ifi 10

如果您不想计算 SSL 握手部分,那么它是time_starttransfer - time_pretransfer

这是来自cloudflare 博客的一个很好的图表

在此输入图像描述


小智 6

我会说你是对的, (time_starttransfer - time_connect) 绝对是服务器处理请求所花费的时间。

但是 - 我也想知道 time_connect 和 time_pretransfer 之间有什么区别?(被@Schwartzie 和@Cheeso 的评论所吸引)

通过查看网络上的几个 curl 查询,我观察到有时它们是相等的,有时它们不是。

然后我发现(至少我相信)它们仅在 HTTPS 请求上有所不同,因为服务器需要一些时间来解密 ssl 层,这不完全是目标应用程序花费的时间,而是托管应用程序的服务器花费的时间/服务。

解密 ssl 的时间(以及连接 time_connect 中给出的时间)是 time_appconnect,并且仅当它为 0 时(例如对于非 https 请求)- time_connect 和 time_pretransfer 是相等的,否则对于 https 请求它们不同,对于 https time_pretransfer 将等于 time_appconnect(而不是 time_connect)。

检查以下两个示例:

  • curl -kso /dev/null -w "time_connect=%{time_connect}, time_appconnect:%{time_appconnect}, time_pretransfer=%{time_pretransfer}\n" http://www.csh.rit.edu

    • time_connect=0.128, time_appconnect:0.000, time_pretransfer=0.128
  • curl -kso /dev/null -w "time_connect=%{time_connect}, time_appconnect:%{time_appconnect}, time_pretransfer=%{time_pretransfer}\n" https://www.csh.rit.edu

    • time_connect=0.133, time_appconnect:0.577, time_pretransfer=0.577

所以我会说 time_pretransfer 与 time_connect 相比使用更精确,因为它也会尊重 ssl 连接,也许还有一些我不知道的其他事情。

综上所述,我想说这个问题的更准确答案:

  • “我如何确定服务器处理请求所用的时间?”

可能是:

  • time_starttransfer - time_pretransfer

正如@Schwartzie 已经提到的,我只是想了解原因。