一次HTTP/HTTPS请求从客户端到服务器完整全过程(超详细)
一次HTTP/HTTPS请求从客户端到服务器完整全过程(超详细)
本文档完整梳理用户输入网址/点击请求到服务器返回数据、页面渲染完成的全链路,包含网络原理、服务架构、安全校验、数据交互全流程,附带完整流程图,适合面试复习、技术科普、新人学习。
一、整体链路总览
客户端 → DNS解析 → TCP连接建立 → TLS加密握手(HTTPS) → 公网路由转发 → 安全防护校验 → 负载均衡分发 → Web服务接收 → 应用服务处理 → 业务逻辑执行 → 缓存/数据库交互 → 响应回传 → 连接断开 → 客户端渲染展示
二、分步详细流程解析
1. 客户端构造请求报文
用户在浏览器/APP发起操作(输入网址、点击按钮、接口请求),客户端自动组装标准 HTTP/HTTPS 请求报文。
报文包含:请求方法(GET/POST等)、请求URL、协议版本、请求头(User-Agent、Cookie、Token、Referer)、请求参数、请求体等信息。
此时客户端仅知道域名(如www.baidu.com),不知道服务器真实IP,触发DNS解析。
2. DNS域名解析(域名 → 公网IP)
遵循递归+迭代查询机制,由近到远逐级查询,优先读取缓存,提升解析速度:
-
浏览器缓存:先查浏览器本地是否缓存过对应域名IP
-
系统缓存:读取电脑本地hosts文件、系统DNS缓存
-
本地DNS服务器:访问运营商/公共DNS(114.114.114.114、8.8.8.8)
-
根域名服务器:返回顶级域名服务器地址
-
顶级域名服务器(.com/.cn):返回权威服务器地址
-
权威域名服务器:返回目标服务器真实公网IP
解析完成后,客户端拿到服务器IP,准备建立网络连接。
3. 传输层连接建立(TCP三次握手)
HTTP基于TCP协议,需要先建立可靠、面向连接的通信通道,通过三次握手确认双方收发能力正常:
-
客户端 → 服务端:发送SYN报文(请求建立连接)
-
服务端 → 客户端:返回SYN+ACK报文(同意连接、确认收到)
-
客户端 → 服务端:发送ACK报文(连接建立成功)
4. TLS/SSL加密握手(仅HTTPS)
普通HTTP无加密,HTTPS在TCP连接后,进行TLS握手,完成密钥协商、数据加密,防止数据被窃听、篡改、劫持:
-
客户端发送加密套件、版本支持列表
-
服务端返回选中的加密套件、服务器证书
-
客户端校验证书合法性(CA机构签名、有效期)
-
客户端生成随机密钥,用服务器公钥加密传输
-
服务端用私钥解密获取密钥
-
双方确认加密通道建立,后续数据均加密传输
5. 公网路由转发(跨网络传输)
请求数据包从客户端出发,经过多级网络设备逐级寻址转发:
本机网卡 → 局域网路由器/网关 → 运营商城域网 → 骨干网路由器 → 目标机房公网入口
全程依靠IP路由协议寻址,跨越不同网段、运营商网络,最终到达服务器机房边界。
6. 安全边界过滤(拦截非法请求)
请求进入机房前,经过多层安全防护,过滤恶意流量,是服务的第一道屏障:
-
安全组:云服务器端口、IP白名单/黑名单校验,放行合法端口(80/443)
-
防火墙:拦截异常数据包、端口扫描、非法访问
-
WAF Web应用防火墙:拦截SQL注入、XSS跨站、爬虫、CC攻击、恶意参数
非法请求直接拦截丢弃,合法请求继续转发。
7. 负载均衡流量分发
为避免单服务器压力过大,通过负载均衡将流量分发到多台业务服务器,实现高可用、高并发:
-
四层负载均衡(LVS):基于IP+端口转发,性能极高
-
七层负载均衡(Nginx):基于URL、请求头、权重分发,支持复杂规则
根据负载策略(轮询、权重、IP哈希、最小连接数),将请求分发到空闲的后端节点。
8. Web服务层接收请求(Nginx/Apache)
Nginx/Apache监听80/443端口,接收负载均衡转发的请求,完成以下操作:
-
解析HTTP协议、请求方法、请求路径
-
处理静态资源(图片、css、js),直接返回无需转发
-
对动态接口请求,执行反向代理,转发给后端应用服务
-
处理跨域、限流、重试、日志记录
9. 应用服务预处理(框架层)
请求到达后端业务服务(Java/Go/Python/PHP服务),框架统一预处理:
-
路由匹配:根据URL定位对应接口方法
-
跨域校验:校验请求源,放行合法跨域请求
-
身份鉴权:校验Token、Session、登录状态
-
权限校验:判断当前用户是否有权访问该接口
-
参数校验:校验请求参数合法性、非空、格式
校验失败直接返回异常响应,不执行业务逻辑。
10. 核心业务逻辑执行
预处理通过后,执行开发者编写的业务代码:
-
业务数据计算、逻辑判断
-
调用第三方接口、内部微服务
-
事务控制、日志记录、异常捕获
11. 数据层交互(缓存+数据库)
业务逻辑需要读写数据时,访问数据存储层,常规流程:
-
优先查询 Redis缓存:命中缓存直接返回数据,提升速度,减轻数据库压力
-
缓存未命中:查询 MySQL/PostgreSQL 数据库
-
写操作:更新数据库,同时更新/淘汰缓存数据
12. 响应报文原路回传
业务执行完成,服务端组装响应数据(状态码、响应头、返回数据、Cookie),按照原链路逆向返回:
数据库/缓存 → 业务服务 → Nginx → 负载均衡 → 安全防护 → 公网路由 → 客户端
13. 断开TCP连接(四次挥手)
数据传输完成后,通过四次挥手优雅断开TCP连接,释放网络资源:
-
客户端发送FIN:请求关闭连接
-
服务端返回ACK:确认关闭请求,继续传输剩余数据
-
服务端发送FIN:数据传输完毕,请求关闭
-
客户端返回ACK:连接彻底断开
14. 客户端解析渲染
浏览器/APP接收响应数据,解析HTML/JS/CSS、接口JSON数据,完成页面渲染、数据展示,用户最终看到页面内容。
三、完整请求链路流程图(Mermaid)
可直接复制到支持Mermaid的编辑器(Typora、VS Code、掘金等)渲染可视化流程图
flowchart LR
A[客户端发起HTTP/HTTPS请求] --> B[DNS逐级解析 域名转公网IP]
B --> C[TCP三次握手 建立可靠连接]
C --> D[HTTPS-TLS加密握手 协商密钥]
D --> E[公网路由多级转发 跨网传输]
E --> F[安全组/防火墙/WAF 拦截恶意请求]
F --> G[负载均衡LVS/Nginx 流量分发]
G --> H[Nginx Web服务 解析请求+反向代理]
H --> I[应用框架预处理 路由/鉴权/参数校验]
I --> J[执行核心业务逻辑代码]
J --> K[读写Redis缓存/MySQL数据库]
K --> L[组装响应报文 原路逆向回传]
L --> M[TCP四次挥手 断开连接释放资源]
M --> N[客户端解析数据 渲染页面展示]
四、核心总结(面试高频)
-
前置流程:DNS解析 → TCP连接 → TLS加密(HTTPS独有)
-
网关防护流程:路由转发 → 安全校验 → 负载均衡
-
服务处理流程:Web服务 → 框架校验 → 业务逻辑 → 数据读写
-
收尾流程:响应回传 → 断开连接 → 客户端渲染
所有外网请求,均遵循「先组网、再校验、后业务、原路返回」的核心逻辑。
(注:文档部分内容可能由 AI 生成)
本文由萧兮的博客原创发布,欢迎转载,转载务必保留原文链接。
萧兮的博客:https://www.20010515.xyz · 原文:https://www.20010515.xyz/posts/019e4ece-8827-79a0-8746-5a68d57a2941