一、早期发展
HTTP(HyperText Transfer Protocol) 是万维网(WWW)的基础通信协议,最早诞生于1990年代初,用于在网络客户端和服务端之间传输超文本信息。
HTTP/0.9 (1991): 只支持GET
方法,响应体仅能传出纯文本,无响应头,满足了最早期超文本浏览的需求。
HTTP/1.0 (1996): 引入 请求/响应报文格式 ,支持多种请求方法(如POST
、HEAD
),并借鉴 MIME 设计了消息头(Content-Type
、Content-Length
等)。这个版本奠定了现代HTTP的基本架构,但每次请求都要建立新的TCP连接,效率较低。
HTTP/1.1 (1999): HTTP/1.1 通过 持久连接、管道化 和更多的状态码提升了性能,同时完善了缓存控制、内容协商和分块传输。
二、HTTP/2
HTTP/2在2015年被采纳,核心特性如下:
- 二进制分帧: 将报文拆分为帧,以二进制形式传输,减少解析开销。
- 单连接多路复用: 多个请求/响应流可以复用同一个TCP连接,消除队头阻塞。
- 头部压缩: 对重复出现的请求/响应头部进行压缩,降低带宽占用。
由于以上特性,HTTP/2在移动网络等高延迟场景中优势明显。
三、HTTP/3与QUIC
HTTP/3引入了基于QUIC(UDP+TLS)的传输层:
0-RTT 握手: 利用 QUIC 的 0-RTT 特性,实现更快的连接建立。
内置加密: QUIC 本身集成 TLS 1.3,实现一次握手同时完成加密协商。
连接迁移: 支持客户端 IP 切换(如从 Wi-Fi 切到蜂窝网络)时保留连接状态,提高移动场景稳定性。
四、HTTP核心原理
无状态(Stateless): 每个请求独立处理,服务器不保留客户端状态;需要状态管理时,借助 Cookie、Session、Token 等机制实现会话保持。
请求-响应模型: 客户端发送请求报文(包含请求行、头部、可选请求体),服务器返回响应报文(包含状态行、头部、响应体)。
可扩展性: 通过自定义头部、方法和状态码,以及多版本并行共存,HTTP 实现了高度可扩展的设计。
缓存与路由: Cache-Control、ETag、Last-Modified 等头部配合 CDN、反向代理,优化资源复用与网络负载。
五、实际实现
当下,HTTP/HTTPS 协议由 浏览器(Chrome、Firefox 等) 与 服务器(Nginx、Apache、LiteSpeed、Node.js) 联合实现:
TLS 加密
- 现代网站几乎全部启用 HTTPS,在 HTTP 之上引入 TLS(通常为 TLS 1.2/1.3)保障传输安全。
- TLS 1.3 简化握手、剔除弱加密套件,减少时延并提升安全性。
多路复用
- 浏览器根据支持情况自动切换 HTTP/2 或 HTTP/3,底层由 QUIC 或 TCP 复用连接。
- 服务器端配置 ALPN(Application-Layer Protocol Negotiation)来协商使用何种 HTTP 版本。
中间件与微服务
- API 网关(如 Kong、Envoy)分发流量、做负载均衡;
- gRPC 使用 HTTP/2 提供高效双向流与 Protocol Buffers 序列化;
- GraphQL 在 HTTP/HTTPS 之上仅用一个端点,为客户端定制数据请求。
六、与TCP和UDP的关系
协议 | 所在层级 | 主要特性 | 典型用途 |
---|---|---|---|
HTTP | 应用层 | 请求/响应、无状态 | 网页浏览、RESTful API、微服务调用 |
TCP | 传输层 | 面向连接、可靠、有序 | HTTP/1.x、FTP、SMTP |
UDP | 传输层 | 无连接、不可靠、无序 | DNS 查询、实时音视频、游戏数据包。通过QUIC与HTTP/3产生联系 |