HTTP/2 与 RPC 精讲教程
HTTP/2 与 RPC 精讲教程
从协议原理到工程实践,系统掌握现代网络通信核心技术
教程简介
本教程系统性地讲解 HTTP/2 协议及其生态中的 RPC(远程过程调用)框架。从 HTTP/2 的底层二进制分帧机制出发,逐步深入到多路复用、流量控制、服务器推送等核心特性,再扩展到 HTTP/3 与 QUIC 协议的演进,最终落脚到 gRPC、Thrift、Connect 等主流 RPC 框架的实战应用。
无论你是后端工程师、架构师,还是对网络协议感兴趣的开发者,本教程都将为你提供:
- 协议原理:深入理解 HTTP/2 的设计哲学与实现细节
- 代码实战:每章附带可运行的代码示例(Go / Python / Java)
- 架构决策:REST vs gRPC 的选型指南与性能对比
- 工程落地:Docker 部署、Kubernetes 编排、Service Mesh 集成
前置知识
| 知识领域 | 要求程度 | 说明 |
|---|---|---|
| HTTP/1.1 协议 | ★★★☆☆ | 了解请求/响应模型、状态码、头部 |
| TCP/IP 基础 | ★★★☆☆ | 了解三次握手、拥塞控制概念 |
| 编程能力 | ★★★☆☆ | 熟悉至少一门后端语言 |
| 命令行操作 | ★★☆☆☆ | 基本的终端操作与工具使用 |
教程大纲
第一部分:HTTP/2 协议深入
| 章节 | 标题 | 核心内容 |
|---|---|---|
| 01 | HTTP/2 概述与历史 | SPDDY 演进、设计目标、性能优势、适用场景 |
| 02 | 二进制分帧层 | 帧格式、帧类型、流标识符、与 HTTP/1.1 的差异 |
| 03 | 多路复用与流控制 | 并发流、队头阻塞解决、流优先级、依赖树 |
| 04 | 头部压缩 HPACK | 静态表、动态表、Huffman 编码、安全考量 |
| 05 | 服务器推送 | PUSH_PROMISE、缓存关联、典型场景、弃用争议 |
| 06 | 流量控制机制 | 连接级/流级窗口、窗口更新、背压处理 |
| 07 | HTTP/3 与 QUIC | QUIC 协议、UDP 基础、连接迁移、0-RTT |
第二部分:RPC 框架实战
| 章节 | 标题 | 核心内容 |
|---|---|---|
| 08 | gRPC 基础 | Protocol Buffers、四种通信模式、代码生成 |
| 09 | gRPC 流式通信 | 服务端/客户端/双向流、错误处理、流控 |
| 10 | gRPC 高级特性 | 拦截器、负载均衡、重试、元数据、截止时间 |
| 11 | REST vs gRPC 选型 | 性能对比、适用场景、混合架构、迁移策略 |
第三部分:更多 RPC 协议与工程实践
| 章节 | 标题 | 核心内容 |
|---|---|---|
| 12 | Apache Thrift | IDL 定义、传输协议、服务框架、与 gRPC 对比 |
| 13 | Connect 协议 | 兼容 gRPC、Web 原生支持、curl 友好 |
| 14 | 容器化部署 | Docker 构建、K8s 编排、gRPC 负载均衡、Service Mesh |
| 15 | 最佳实践总结 | API 设计、版本管理、错误处理、性能调优 |
快速开始
# 克隆示例代码仓库
git clone https://github.com/example/http2-rpc-tutorial.git
cd http2-rpc-tutorial
# 运行 HTTP/2 示例服务器(Go)
cd examples/go-http2-server
go run main.go
# 运行 gRPC 示例(需要先安装 protoc)
cd examples/grpc-hello
go run server/main.go &
go run client/main.go
环境准备
本教程的代码示例基于以下环境:
| 工具 | 版本要求 | 安装说明 |
|---|---|---|
| Go | ≥ 1.21 | https://go.dev/dl/ |
| Python | ≥ 3.10 | https://www.python.org/ |
| Java | ≥ 17 | https://adoptium.net/ |
| Protocol Buffers | ≥ 3.x | https://grpc.io/docs/protoc-installation/ |
| Docker | ≥ 24.x | https://docs.docker.com/get-docker/ |
| curl | ≥ 7.88 | 需支持 --http2 参数 |
约定说明
| 符号 | 含义 |
|---|---|
| 💡 | 最佳实践 / 技巧 |
| ⚠️ | 注意事项 / 常见陷阱 |
| 🔗 | 相关链接 / 交叉引用 |
| 📝 | 笔记 / 补充说明 |