Posted in: cURL, Network

HTTP 请求的 `curl` 命令执行过程分解

HTTP 请求的 curl 命令执行过程分解

当您使用 curl 发送请求到一个网站时,整个过程涉及客户端和服务器端的多个步骤。以下是详细的步骤分解:

客户端(Client Side)

  1. 解析命令行参数
  2. curl 解析命令行参数,确定请求的目标 URL、方法(GET/POST 等)、头信息、输出格式等。

  3. DNS 解析 (time_namelookup)

  4. 将域名解析为 IP 地址。
  5. 这一步的时间记录为 time_namelookup

  6. TCP 握手 (time_connect)

  7. 与目标服务器建立 TCP 连接(三次握手)。
  8. 这一步的时间记录为 time_connect

  9. SSL/TLS 握手 (time_appconnect)

  10. 如果是 HTTPS 请求,进行 SSL/TLS 握手以确保安全连接。
  11. 这一步的时间记录为 time_appconnect

  12. 发送 HTTP 请求 (time_pretransfer)

  13. 发送 HTTP 请求报文(包括请求行、头信息和可能的请求体)。
  14. 这一步的时间记录为 time_pretransfer

  15. 等待响应 (time_starttransfer)

  16. 等待服务器返回第一个字节的数据(Time To First Byte, TTFB)。
  17. 这一步的时间记录为 time_starttransfer

  18. 接收数据 (time_total)

  19. 接收完整的响应数据。
  20. 整个请求的总时间记录为 time_total

服务器端(Server Side)

  1. 接收请求
  2. 服务器接收来自客户端的 HTTP 请求。

  3. 处理请求

  4. 根据请求的内容,服务器执行相应的逻辑处理(如查询数据库、调用其他服务等)。

  5. 生成响应

  6. 服务器根据处理结果生成响应报文(包括状态码、头信息和响应体)。

  7. 发送响应

  8. 将响应报文发送回客户端。

序列图 (Sequence Diagram)

“`mermaid
sequenceDiagram
participant Client as 客户端
participant DNS as DNS 服务器
participant Server as 服务器

Client->>Client: 解析命令行参数
Client->>DNS: DNS 查询
DNS-->>Client: 返回 IP 地址
Client->>Client: time_namelookup 完成

Client->>Server: TCP 握手
Server-->>Client: TCP 握手完成
Client->>Client: time_connect 完成

Client->>Server: SSL/TLS 握手 (HTTPS)
Server-->>Client: SSL/TLS 握手完成
Client->>Client: time_appconnect 完成

Client->>Server: 发送 HTTP 请求
Client->>Client: time_pretransfer 完成

Server->>Server: 处理请求
Server->>Server: 生成响应
Server-->>Client: 发送响应
Client->>Client: time_starttransfer 完成

Client->>Client: 接收完整响应
Client->>Client: time_total 完成

“`

关键时间点解释

  • time_namelookup:从发起请求到完成 DNS 解析的时间。
  • time_connect:从发起请求到完成 TCP 握手的时间。
  • time_appconnect:从发起请求到完成 SSL/TLS 握手的时间(仅适用于 HTTPS 请求)。
  • time_pretransfer:从发起请求到开始传输数据的时间(包括 DNS 解析、TCP 握手和 SSL/TLS 握手)。
  • time_starttransfer:从发起请求到接收到第一个字节响应的时间(TTFB)。
  • time_total:从发起请求到接收完整响应的时间。

通过以上步骤和序列图,您可以清晰地了解 curl 请求的整个流程及其各个阶段的时间消耗。

Back to Top