浏览器与协议

HTTP 协议深度深挖研究版(架构 + 报文 + 版本演进 + 缓存 + HTTPS+HTTP2/3 底层原理)

HTTP:超文本传输协议(HyperText Transfer Protocol)

作者:洋柿子·2026-09-01·共 3 篇 · 当前 1

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 四大核心本质特性

  1. 无状态

    服务器不保存客户端任何会话信息,每次请求独立无关联。

解决方案:Cookie、Session、Token、JWT。

  1. 明文传输

    HTTP1.x/2 全部裸奔明文,数据不加密,容易被抓包、篡改、监听。

衍生:HTTPS = HTTP + TLS 加密层。

  1. 请求 - 响应 一对一

    一次 HTTP 请求对应一次响应,服务端不能主动推数据(HTTP2 服务端推送、WebSocket 打破此限制)。

  2. 面向文本(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 种

  1. GET:查询资源,安全、幂等,无请求体,可缓存
  2. POST:提交资源,不安全、不幂等,有请求体,默认不缓存
  3. PUT:全量更新 / 创建资源,幂等
  4. DELETE:删除资源,幂等
  5. 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

核心解决三大问题

  1. 数据加密:防窃听
  2. 身份认证:防伪装中间人
  3. 数据完整性:防篡改

TLS 握手极简流程

  1. 客户端 → 服务端:支持的加密套件、TLS 版本
  2. 服务端 → 客户端:选定加密套件 + 服务器证书
  3. 客户端校验证书合法性(CA 根证书背书)
  4. 客户端生成随机密钥,用服务端公钥加密发送
  5. 双方用对称密钥加密传输后续 HTTP 数据

非对称加密:只用来传密钥;对称加密:用来传业务数据(速度快)


九、HTTP/2 核心深挖

  1. 二进制帧传输

    把文本拆分为二进制帧,解析效率高,无文本冗余。

  2. 多路复用

    一个 TCP 连接里同时并发多个请求,互不阻塞,解决 HTTP1.1 串行排队。

  3. 头部压缩 HPACK

    维护头尾字典,重复 Header 只传索引,大幅减少请求体积。

  4. 服务器推送

    服务端可主动推送 JS/CSS/ 图片,不用客户端逐个请求。

⚠️ 缺陷:仍基于 TCP,TCP 层队头阻塞依旧存在。


十、HTTP/3 核心深挖(QUIC 协议)

  1. 底层改用 UDP 传输
  2. 内置 TLS 加密,默认安全
  3. 0RTT 握手:重连无需三次握手,延迟极低
  4. 连接迁移:切换 WiFi/4G 不中断连接
  5. 彻底解决队头阻塞:UDP 无有序强约束,单个丢包不阻塞其他请求

十一、经典痛点:队头阻塞 分层解析

  1. HTTP1.1 应用层队头阻塞

    同一域名下 6 个请求限制,前面慢请求阻塞后面。

  2. HTTP2 TCP 层队头阻塞

    单 TCP 连接,一个包丢包,整个连接所有请求都等待重传。

  3. HTTP3 QUIC 彻底解决

    UDP 独立数据流,丢包只影响当前流,不阻塞其他。


十二、延伸可继续深挖方向

我可以接着给你精讲:

  1. HTTP 长连接 / 短连接 底层 TCP 交互流程
  2. 跨域原理:浏览器同源策略 + CORS 预检请求
  3. Cookie/Session/JWT 底层会话机制对比
  4. WebSocket 和 HTTP 关系、握手流程
  5. 抓包实战:用 Wireshark/Fiddler 看 HTTP 原始报文

你想先深入哪一块?