HTTP请求的执行流程是一个系统化的过程,涉及多个网络协议和交互步骤。以下是完整的流程分解,结合关键技术和逻辑顺序:
🌐 一、连接准备阶段
URL解析与初始化
客户端(浏览器/应用)解析目标URL,提取协议(HTTP/HTTPS)、域名、端口、路径等信息。
示例:
https://www.example.com:443/index.html
→ 协议为HTTPS,域名为www.example.com
,端口443。
DNS解析
客户端向DNS服务器查询域名对应的IP地址。
递归查询过程:先查本地缓存 → 本地DNS服务器 → 根DNS → 权威DNS,最终返回IP(如
93.184.216.34
)。作用:将人类可读域名转为机器可识别的IP地址。
🤝 二、建立连接阶段
TCP连接(三次握手)
客户端发送
SYN
包 → 服务器回复SYN-ACK
→ 客户端确认ACK
。建立可靠的双向通信通道,默认端口:HTTP为80,HTTPS为443。
TLS/SSL握手(仅HTTPS)
ClientHello:客户端发送支持的加密算法和随机数。
ServerHello:服务器选择算法并返回证书+随机数。
证书验证:客户端验证服务器证书的合法性(CA签发、有效期、域名匹配)。
密钥交换:生成会话密钥(如TLS 1.3使用ECDHE算法),后续通信对称加密。
📤 三、请求发送阶段
构造HTTP请求报文
请求行:方法(GET/POST)、路径(
/index.html
)、协议版本(HTTP/1.1)。请求头:
Host
(目标域名)、User-Agent
(客户端类型)、Accept
(支持的内容类型)。请求体:POST/PUT请求携带数据(如表单、JSON)。
示例:
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Chrome/126.0
发送请求
通过已建立的TCP连接(或HTTPS加密通道)发送报文到服务器。
📥 四、服务器处理与响应阶段
服务器处理请求
解析请求:拆解请求行、头部和体。
路由与逻辑:Web服务器(如Nginx)转发到应用服务器(如Spring),执行业务逻辑(数据库查询、文件读取)。
生成响应:构造状态行(如
HTTP/1.1 200 OK
)、响应头(Content-Type
、Cache-Control
)、响应体(HTML/JSON数据)。
返回HTTP响应
通过同一TCP连接将响应报文发回客户端。HTTPS响应需会话密钥加密。
🖥️ 五、客户端处理阶段
解析与渲染
客户端解析状态码(如200成功、404未找到)、响应头和响应体。
浏览器行为:若为HTML,解析DOM/CSS/JS并渲染页面;若为JSON,交由应用逻辑处理。
🔒 六、连接管理阶段
TCP连接关闭或复用
短连接(HTTP/1.0):默认关闭(四次挥手:FIN → ACK → FIN → ACK)。
长连接(HTTP/1.1+):默认保持(
Connection: keep-alive
),复用同一连接处理多个请求,减少握手开销。HTTP/2优化:多路复用(单一连接并行处理多个请求)。
💎 关键注意事项
HTTPS安全性:加密(防窃听)、证书验证(防中间人攻击)、完整性校验(防篡改)。
性能优化:
DNS预取、TCP快速打开。
缓存策略(浏览器缓存
Cache-Control
、服务器缓存ETag)。
协议差异:HTTP/1.1需管线化避免队头阻塞,HTTP/2支持二进制分帧提升效率。
✅ 流程总结:
域名解析 → TCP握手 → (HTTPS加密) → 发送请求 → 服务器处理 → 返回响应 → 客户端渲染 → 连接复用/关闭
这一过程是Web通信的基石,理解每个环节有助于优化应用性能和排查网络问题。