网络相关 - http1.1 与 http2

HTTP/1.1 与 HTTP/2:核心区别与性能对比

HTTP(HyperText Transfer Protocol)Web 通信的基础协议,从 HTTP/1.1HTTP/2,协议经历了重大升级,显著提升了 Web 性能。

1. HTTP/1.1 的局限性

HTTP/1.11999 年发布,虽然稳定,但随着现代 Web 应用的复杂性增加,其性能瓶颈日益明显:

1.1 队头阻塞(Head-of-Line Blocking)

  • HTTP/1.1 使用串行请求 ,浏览器对同一域名最多允许 6-8 个并发连接
  • 如果某个请求响应慢,后续请求会被阻塞(即使它们可以更快完成)。

1.2 无头部压缩

  • 每个 HTTP 请求都携带大量重复头部(如 User-AgentCookie),导致冗余数据传输。

1.3 文本协议

  • HTTP/1.1 使用纯文本格式,解析效率低,容易出错。

1.4 无服务器推送

  • 服务器无法主动推送资源(如 CSS、JS),必须等待客户端请求。

2. HTTP/2 的核心优化

HTTP/2(2015 年发布)在兼容 HTTP/1.1 语义的基础上,大幅优化了传输效率:

2.1 二进制分帧(Binary Framing)

!WARNING\] HTTP/1.1 是纯文本格式传输数据(存在以下问题)解析复杂(需按行读取) 容易出错(如换行符处理) 无法高效支持多路复用

  • HTTP/2 采用二进制格式 ,取代 HTTP/1.1 的文本格式,解析更高效。
  • 数据被拆分为帧(Frame),每个帧有类型(HEADERS、DATA 等),支持多路复用。
plaintext 复制代码
+-----------------------------------------------+
| Length (24 bits)                              | → 帧长度
+---------------+---------------+---------------+
| Type (8 bits)  | Flags (8 bits)               | → 帧类型和标志位
+-+-------------+---------------+---------------+
| R (1 bit)     | Stream ID (31 bits)           | → 流标识符
+---------------+-------------------------------+
| Frame Payload (0~16,384 bytes)                | → 帧数据
+-----------------------------------------------+

关键字段说明:

Type:帧类型(如 HEADERS、DATA、SETTINGS)

Stream ID:所属流的唯一标识(支持多路复用的关键)

Payload:实际传输的数据

2.2 多路复用(Multiplexing

!WARNING\] HTTP/1.1 的并发限制 浏览器对同一域名限制 6\~8 个 TCP 连接 每个连接只能串行处理请求(队头阻塞) \[!IMPORTANT\] HTTP/2 多路复用 **HTTP/2 通过流(Stream)机制实现真正的并行传输 一个 TCP 连接可并行传输多个请求和响应** ,彻底解决队头阻塞问题。 单 TCP 连接可承载多个双向流(Stream) 每个流有唯一 Stream ID,可乱序发送帧 接收方通过 Stream ID 重组消息

如图所示:

不同流的帧可以交替传输;

一个流的阻塞不会影响其他流;

2.3 头部压缩(HPACK)

!WARNING\] HTTP/1.1 头部的问题 每个请求重复携带相同头部(如 User-Agent、Cookie) 平均头部大小 500\~800 字节,实际有效信息占比低

  • 使用 HPACK 算法 压缩 HTTP 头部,减少冗余数据(如 User-Agent 只需发送一次)。
  • 典型场景下,头部大小减少 50%-90%

!IMPORTANT\] HPACK 压缩原理 **(1) 静态表(Static Table)** 预定义 61 个常见头部字段(如 :method: GET 对应索引 2) **(2) 动态表(Dynamic Table)** 在连接过程中动态维护的头部字段表(如自定义 X-Token) **(3) 编码方式** 索引表示:直接引用表中的索引(如 :method: GET → 0x82,霍夫曼编码:对字符串进一步压缩

压缩示例:

plaintext 复制代码
原始头部:
  :method: GET
  :path: /index.html
  user-agent: Mozilla/5.0

压缩后:
  0x82 (静态表索引2: GET)
  0x85 (静态表索引5: /index.html)
  0x40 0x7a (动态表新增user-agent)

2.4 服务器推送(Server Push)

  • 服务器可以主动推送资源(如 CSS、JS)到客户端缓存,减少额外请求延迟。

  • 例如:

    http 复制代码
    HTTP/2 200 OK
    Link: </style.css>; rel=preload; as=style

    服务器可同时推送 style.css,而不需等待 HTML 解析后再请求。

2.5 流优先级(Stream Prioritization)

  • 客户端可指定请求的优先级(如优先加载 CSS 而非图片),优化渲染性能。

3. HTTP/1.1 vs HTTP/2 对比表

特性 HTTP/1.1 HTTP/2
传输协议 文本 二进制
并发模型 6-8 个连接/域名(串行) 单连接多路复用
头部压缩 HPACK 压缩
服务器推送 不支持 支持
队头阻塞 存在(TCP 层) 基本解决(QUIC 彻底解决)
优先级控制 有限支持(如 <link preload> 精细控制(权重依赖树)

4. HTTP/2 的实际性能优势

4.1 减少延迟

  • 多路复用 + 头部压缩使页面加载速度提升 30%-50%(尤其是高延迟网络)。

4.2 降低服务器负载

  • 单连接替代多连接,减少 TCP 握手和 TLS 协商开销。

4.3 更好的移动端体验

  • 头部压缩节省流量(对蜂窝网络尤为重要)。
相关推荐
是上好佳佳佳呀7 分钟前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
CDN36041 分钟前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
7ACE1 小时前
Wireshark TS | TLP 超时时间
网络·网络协议·tcp/ip·wireshark·tcpdump
之歆1 小时前
Day07_CSS盒子模型 · 样式继承 · 用户代理样式
前端·css
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第四章
网络·笔记·安全·网络安全·密码学·ctf
DanCheOo1 小时前
AI 应用的安全架构:Prompt 注入、数据泄露、权限边界
前端·人工智能·prompt·安全架构
草履虫君2 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
We་ct2 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
@insist1232 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试