HTTP 协议深度深挖研究版(架构 + 报文 + 版本演进 + 缓存 + HTTPS+HTTP2/3 底层原理)
HTTP:超文本传输协议(HyperText Transfer Protocol)
HTTP 协议深度深挖研究版(架构 + 报文 + 版本演进 + 缓存 + HTTPS+HTTP2/3 底层原理)
一、HTTP 核心定位(专业定义)
HTTP:超文本传输协议(HyperText Transfer Protocol)
- 属于 TCP/IP 五层模型:应用层协议
- 默认基于 TCP 可靠传输(HTTP3 改为 UDP)
- 核心模型:客户端 - 服务端 请求 / 响应 模型
- 本质特征:无状态、明文传输、面向文本(HTTP1.x)
网络层级架构图
应用层 → HTTP / HTTPS / WebSocket
传输层 → TCP (HTTP1/2) UDP (HTTP3/QUIC)
网络层 → IP
数据链路层 → 以太网/WiFi
物理层 → 硬件传输
二、HTTP 四大核心本质特性
无状态
服务器不保存客户端任何会话信息,每次请求独立无关联。
解决方案:Cookie、Session、Token、JWT。
明文传输
HTTP1.x/2 全部裸奔明文,数据不加密,容易被抓包、篡改、监听。
衍生:HTTPS = HTTP + TLS 加密层。
请求 - 响应 一对一
一次 HTTP 请求对应一次响应,服务端不能主动推数据(HTTP2 服务端推送、WebSocket 打破此限制)。
面向文本(HTTP1.x)
请求行、请求头、响应头都是ASCII 文本字符串,可读性强、冗余大。
三、HTTP 版本完整演进谱系(底层差异)
版本迭代链路
HTTP/1.0 → HTTP/1.1 → HTTP/2 → HTTP/3(QUIC)
各版本核心痛点与革新
| 版本 | 底层承载 | 核心问题 | 关键革新 |
|---|---|---|---|
| HTTP/1.0 | TCP | 短连接、每次请求新建 TCP、性能差 | 无持久连接、串行请求、无虚拟主机 |
| HTTP/1.1 | TCP | 队头阻塞、请求头冗余、并发限制 | 默认长连接、管线化、虚拟主机、分块传输、缓存完善 |
| HTTP/2 | TCP | 仍存在 TCP 层队头阻塞 | 二进制帧、多路复用、头部压缩、服务器推送 |
| HTTP/3 | UDP+QUIC | TCP 握手延迟、弱网差、队头阻塞彻底无解 | 基于 UDP、0RTT 握手、连接迁移、彻底解决队头阻塞 |
四、HTTP 标准报文结构(图像化拆解)
1. 请求报文 完整结构
请求行 → 方法 URL HTTP版本
请求头 → Key: Value 多行
空行 → 必须换行分隔
请求体 → POST/PUT 携带的数据(GET无请求体)
示例结构:
plaintext
GET /index.html HTTP/1.1
Host: www.xxx.com
User-Agent: Mozilla/5.0
Accept: text/html
(空行)
2. 响应报文 完整结构
plaintext
状态行 → HTTP版本 状态码 描述
响应头 → Key: Value 多行
空行
响应体 → 网页HTML/JSON/文件流
关键知识点
- 1.x 全是文本格式,分隔靠换行、空格;
- HTTP/2 改为二进制帧,不再靠文本分割,解析更快、冗余更小。
五、HTTP 请求方法(9 种 语义 + 幂等性 深挖)
常用 5 种
- GET:查询资源,安全、幂等,无请求体,可缓存
- POST:提交资源,不安全、不幂等,有请求体,默认不缓存
- PUT:全量更新 / 创建资源,幂等
- DELETE:删除资源,幂等
- HEAD:只拿响应头,不返回响应体,做探测用
冷门 4 种
OPTIONS:查询服务器支持的请求方法(跨域预检用到)PATCH:局部更新(非幂等)TRACE:环路探测,调试用CONNECT:隧道代理,HTTPS 代理转发
两个专业概念
- 安全:请求不会修改服务器数据(GET/HEAD/OPTIONS 安全)
- 幂等:发起多次请求和一次请求效果完全一样(GET/PUT/DELETE 幂等)
六、HTTP 状态码 分层原理(1xx~5xx)
分类逻辑
- 1xx:信息性,请求已接收,继续处理
- 2xx:成功,请求正常完成
- 3xx:重定向,需要进一步跳转 / 走缓存
- 4xx:客户端错误,请求参数 / 权限 / 路径错误
- 5xx:服务端错误,服务器程序异常
核心必懂状态码底层含义
- 200:请求成功
- 204:无响应体
- 301:永久重定向(浏览器永久缓存跳转)
- 302:临时重定向
- 304:协商缓存命中,直接用本地缓存,不返回资源
- 400:请求参数错误
- 401:未认证
- 403:已认证但无权限
- 404:资源不存在
- 500:服务器内部异常
- 502:网关错误
- 503:服务不可用
七、HTTP 缓存机制(深挖:强缓存 + 协商缓存)
缓存整体流程图
plaintext
客户端发起请求
↓
判断【强缓存】是否命中
是 → 直接用本地缓存,不发任何网络请求
否 → 发起请求走【协商缓存】
↓
服务端对比资源标识
命中 → 返回 304,客户端用本地缓存
未命中 → 返回 200 + 新资源,更新本地缓存
1. 强缓存(不用发请求)
Expires:绝对时间,受客户端时钟影响,有缺陷Cache-Control:相对时间max-age=3600,优先级高于 Expires
2. 协商缓存(发请求但不返资源)
Last-Modified / If-Modified-Since:基于文件修改时间ETag / If-None-Match:基于资源唯一指纹,优先级更高,解决时间精度问题
八、HTTPS 底层原理(HTTP+TLS)
架构分层
plaintext
应用层 HTTP
加密层 TLS/SSL
传输层 TCP
核心解决三大问题
- 数据加密:防窃听
- 身份认证:防伪装中间人
- 数据完整性:防篡改
TLS 握手极简流程
- 客户端 → 服务端:支持的加密套件、TLS 版本
- 服务端 → 客户端:选定加密套件 + 服务器证书
- 客户端校验证书合法性(CA 根证书背书)
- 客户端生成随机密钥,用服务端公钥加密发送
- 双方用对称密钥加密传输后续 HTTP 数据
非对称加密:只用来传密钥;对称加密:用来传业务数据(速度快)
九、HTTP/2 核心深挖
二进制帧传输
把文本拆分为二进制帧,解析效率高,无文本冗余。
多路复用
一个 TCP 连接里同时并发多个请求,互不阻塞,解决 HTTP1.1 串行排队。
头部压缩 HPACK
维护头尾字典,重复 Header 只传索引,大幅减少请求体积。
服务器推送
服务端可主动推送 JS/CSS/ 图片,不用客户端逐个请求。
⚠️ 缺陷:仍基于 TCP,TCP 层队头阻塞依旧存在。
十、HTTP/3 核心深挖(QUIC 协议)
- 底层改用 UDP 传输
- 内置 TLS 加密,默认安全
- 0RTT 握手:重连无需三次握手,延迟极低
- 连接迁移:切换 WiFi/4G 不中断连接
- 彻底解决队头阻塞:UDP 无有序强约束,单个丢包不阻塞其他请求
十一、经典痛点:队头阻塞 分层解析
HTTP1.1 应用层队头阻塞
同一域名下 6 个请求限制,前面慢请求阻塞后面。
HTTP2 TCP 层队头阻塞
单 TCP 连接,一个包丢包,整个连接所有请求都等待重传。
HTTP3 QUIC 彻底解决
UDP 独立数据流,丢包只影响当前流,不阻塞其他。
十二、延伸可继续深挖方向
我可以接着给你精讲:
- HTTP 长连接 / 短连接 底层 TCP 交互流程
- 跨域原理:浏览器同源策略 + CORS 预检请求
- Cookie/Session/JWT 底层会话机制对比
- WebSocket 和 HTTP 关系、握手流程
- 抓包实战:用 Wireshark/Fiddler 看 HTTP 原始报文
你想先深入哪一块?