一次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)

遵循递归+迭代查询机制,由近到远逐级查询,优先读取缓存,提升解析速度:

  1. 浏览器缓存:先查浏览器本地是否缓存过对应域名IP

  2. 系统缓存:读取电脑本地hosts文件、系统DNS缓存

  3. 本地DNS服务器:访问运营商/公共DNS(114.114.114.114、8.8.8.8)

  4. 根域名服务器:返回顶级域名服务器地址

  5. 顶级域名服务器(.com/.cn):返回权威服务器地址

  6. 权威域名服务器:返回目标服务器真实公网IP

解析完成后,客户端拿到服务器IP,准备建立网络连接。

3. 传输层连接建立(TCP三次握手)

HTTP基于TCP协议,需要先建立可靠、面向连接的通信通道,通过三次握手确认双方收发能力正常:

  1. 客户端 → 服务端:发送SYN报文(请求建立连接)

  2. 服务端 → 客户端:返回SYN+ACK报文(同意连接、确认收到)

  3. 客户端 → 服务端:发送ACK报文(连接建立成功)

4. TLS/SSL加密握手(仅HTTPS)

普通HTTP无加密,HTTPS在TCP连接后,进行TLS握手,完成密钥协商、数据加密,防止数据被窃听、篡改、劫持:

  1. 客户端发送加密套件、版本支持列表

  2. 服务端返回选中的加密套件、服务器证书

  3. 客户端校验证书合法性(CA机构签名、有效期)

  4. 客户端生成随机密钥,用服务器公钥加密传输

  5. 服务端用私钥解密获取密钥

  6. 双方确认加密通道建立,后续数据均加密传输

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. 数据层交互(缓存+数据库)

业务逻辑需要读写数据时,访问数据存储层,常规流程:

  1. 优先查询 Redis缓存:命中缓存直接返回数据,提升速度,减轻数据库压力

  2. 缓存未命中:查询 MySQL/PostgreSQL 数据库

  3. 写操作:更新数据库,同时更新/淘汰缓存数据

12. 响应报文原路回传

业务执行完成,服务端组装响应数据(状态码、响应头、返回数据、Cookie),按照原链路逆向返回

数据库/缓存 → 业务服务 → Nginx → 负载均衡 → 安全防护 → 公网路由 → 客户端

13. 断开TCP连接(四次挥手)

数据传输完成后,通过四次挥手优雅断开TCP连接,释放网络资源:

  1. 客户端发送FIN:请求关闭连接

  2. 服务端返回ACK:确认关闭请求,继续传输剩余数据

  3. 服务端发送FIN:数据传输完毕,请求关闭

  4. 客户端返回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