HTTP 与 RPC 协议对比总结
1. 基础概念对比
HTTP(超文本传输协议)
-
定位:应用层协议,设计初衷是用于传输超文本(如网页、图片、音频等),采用请求-响应模式。
-
特点:
-
基于文本传输,报文头(Header)和报文体(Body)均为字符串格式。
-
默认使用长连接(Keep-Alive),但需依赖浏览器行为处理(如重定向、缓存)。
-
RPC(远程过程调用)
-
定位:分布式系统中服务间通信的框架或概念,核心目标是解耦服务,实现跨网络的函数调用28。
-
特点:
-
基于 TCP 或其他传输层协议,支持自定义通信规则。
-
通常采用二进制序列化协议(如 Protobuf、Thrift),减少数据传输体积。
-
2. 底层实现差异
TCP 粘包问题与解决方案
-
问题:TCP 是字节流协议,无法自动区分消息边界,导致多个请求/响应数据包粘连(粘包)。
-
解决方案:
-
HTTP:通过
Content-Length或Transfer-Encoding: chunked明确 Body 长度,解决粘包问题。 -
RPC:自定义消息结构(如固定长度头 + 变长体),或依赖序列化协议自动处理。
-
连接管理
| 特性 | HTTP/1.1 | RPC |
|---|---|---|
| 连接形式 | 单 TCP 长连接复用 | 连接池(多 TCP 连接复用) |
| 性能优化 | 浏览器限制并发连接数 | 支持动态扩容连接池,降低延迟 |
3. 核心差异分析
传输内容与序列化
-
HTTP:
-
传输内容以字符串为主(如 JSON),Header 和 Body 均为文本格式。
-
编码类型受限(如 URL 编码),需处理浏览器兼容性问题
-
-
RPC:
-
采用二进制序列化协议(如 Protobuf),体积更小、解析更快。
-
支持复杂结构体传输,无需考虑浏览器行为(如重定向)
-
性能与效率
| 维度 | HTTP | RPC |
|---|---|---|
| 序列化 | JSON 体积大,解析慢 | Protobuf 体积小,解析快 |
| 连接开销 | 长连接复用受限 | 连接池提升吞吐量 |
| 适用场景 | 浏览器/客户端交互 | 内部微服务通信 |
4. 应用场景选择
使用 HTTP 的场景
-
跨平台交互:需兼容浏览器、移动端等多样化客户端。
-
简单 API 调用:如 RESTful 接口,依赖标准状态码和缓存机制。
使用 RPC 的场景
-
高性能微服务:内部服务间高频调用,需低延迟、高吞吐。
-
复杂数据交互:传输结构体、流数据或二进制文件(如视频流)
5. 协议演进与优化
-
HTTP/2 与 HTTP/3:
-
HTTP/2 引入多路复用和头部压缩,但受限于 TCP 层队头阻塞。
-
HTTP/3 基于 QUIC 协议(UDP),解决队头阻塞,但生态尚未完全成熟。
-
-
RPC 优化方向:
-
集成服务治理功能(如熔断、负载均衡)。
-
支持跨语言调用(如 gRPC 的 IDL 定义)12。
-
总结:HTTP 更适合对外暴露标准化接口,而 RPC 在内部微服务通信中更具性能和灵活性优势。两者本质互补,实际应用中常结合使用(如对外 HTTP 网关 + 内部 RPC 调用)
如需查看完整图解或技术细节,可访问原文链接:小林coding - HTTP和RPC通讯协议比较。

7819

被折叠的 条评论
为什么被折叠?



