本文翻译自我的英文博客,最新修订内容可随时参考:HTTP与HTTPS协议入门
HTTP协议是互联网的基石,HTTPS则是其安全版本。HTTP基于TCP/IP协议,属于应用层协议,不涉及数据包传输细节,主要规定客户端与服务器的通信格式,默认端口为80。
HTTP/0.9(1991年)
- 单一功能:仅支持
GET
方法,建立TCP连接后,客户端发送GET请求,服务器返回HTML资源后立即关闭连接。 - 局限性:不支持其他方法(如POST)、无请求头/响应头,仅能传输纯文本HTML。
HTTP/1.0(1996年)
核心改进
- 协议标准化:引入请求头和响应头,定义了通信格式。
- 方法扩展:新增
POST
(提交数据)、HEAD
(获取头部信息)等方法。 - 状态码体系:引入1xx(信息性)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)等状态码。
- 头部字段:支持
Content-Type
(指定内容类型)、Content-Encoding
(压缩格式)、Cache-Control
(缓存控制)等字段。
缺陷
- 非持久连接:每个TCP连接仅能处理一次请求,多次请求需反复建立连接,效率低下。
HTTP/1.1(1997年)
关键特性
-
持久连接(Persistent Connection)
- 允许同一TCP连接处理多个请求,默认不关闭连接(可通过
Connection: close
主动关闭)。 - 单域名最多建立6个连接,空闲超时后自动断开。
- 允许同一TCP连接处理多个请求,默认不关闭连接(可通过
-
管道化(Pipelining)
- 客户端可在等待前一个响应时发送多个请求(串行队列),通过
Content-Length
标识请求体长度。 - 服务器需按请求顺序响应,引入
Transfer-Encoding: chunked
分块传输,支持流式响应。
- 客户端可在等待前一个响应时发送多个请求(串行队列),通过
-
多域名支持与方法扩展
Host
头部区分同一IP上的不同域名(如虚拟主机)。- 新增
PUT
(上传资源)、DELETE
(删除资源)、OPTIONS
(查询支持的方法)等方法。
缺陷:队头阻塞(Head-of-Line Blocking)
- 同一连接中,前一个请求未响应会阻塞后续请求,即使响应数据已就绪也无法提前处理。
HTTP/2(2015年)
二进制协议与帧结构
- 采用二进制格式传输数据,将数据分割为帧(Frame),如请求帧、响应帧、重置帧等。
- 每个帧包含流标识符(Stream ID),客户端流ID为奇数,服务器流ID为偶数,支持多路复用(同一连接并发处理多个请求)。
核心特性
-
多路复用(Multiplexing)
- 客户端可在同一TCP连接中同时发送多个请求,服务器可乱序响应,彻底解决队头阻塞。
-
头部压缩(HPACK算法)
- 通过建立头部表(Header Table)缓存重复字段,后续请求只需发送索引值,减少头部传输开销。
-
服务器推送(Server Push)
- 服务器可主动推送客户端可能需要的资源(如CSS、JS),提前缓存至客户端。
- 服务器可主动推送客户端可能需要的资源(如CSS、JS),提前缓存至客户端。
-
服务器发送事件(SSE)
- 支持服务器主动向客户端推送数据(如实时通知),基于单向长连接,无需客户端频繁请求。
缺陷
- TCP层队头阻塞:若TCP数据包丢失,整个连接的所有流均需等待重传,影响并发性能。
- 服务器推送局限性:无法直接推送动态消息,需结合SSE实现实时通信。
HTTP/3(2021年)
基于UDP的QUIC协议
- 放弃TCP,改用UDP(用户数据报协议),通过**QUIC(快速UDP互联网连接)**实现可靠性:
- 多路复用:每个流独立传输,单个流丢包不影响其他流。
- 连接迁移:使用连接ID标识会话,IP或端口变更时无需重新握手。
优势
- 减少TCP三次握手和TLS握手延迟,首次连接耗时更低。
- 避免TCP层队头阻塞,提升弱网络(如移动网络)下的性能。
HTTPS:安全的HTTP
HTTPS通过SSL/TLS协议解决HTTP的三大风险(窃听、篡改、伪装),核心流程如下:
TLS握手过程(明文传输)
-
客户端请求(ClientHello)
- 发送支持的协议版本(如TLS 1.3)、随机数(Client Random)、加密算法列表等。
-
服务器响应(ServerHello)
- 确认协议版本、加密算法,返回服务器证书(含公钥)及随机数(Server Random)。
- 若需要客户端认证(如银行系统),会要求提供客户端证书。
-
客户端验证与密钥生成
- 验证服务器证书有效性(CA签名、域名匹配、有效期)。
- 生成预主密钥(Pre-master Secret),用服务器公钥加密后发送。
- 结合三个随机数(Client Random、Server Random、Pre-master Secret)生成会话密钥(Session Key),用于后续对称加密。
-
服务器解密与会话建立
- 用私钥解密预主密钥,生成会话密钥。
- 双方切换至加密通信,后续数据通过对称加密传输。
性能优化
-
会话复用:
- Session ID:服务器内存中存储会话密钥,客户端重连时携带ID恢复会话(需单服务器部署)。
- Session Ticket:服务器颁发加密票据,客户端重连时直接解密恢复密钥(支持分布式部署)。
-
无密钥加密(Keyless SSL):
- 服务器私钥仅用于解密预主密钥,其他流程由CDN等中间层处理,减少私钥暴露风险。
- 服务器私钥仅用于解密预主密钥,其他流程由CDN等中间层处理,减少私钥暴露风险。
SSL与TLS的区别
- SSL(安全套接层):早期协议,因存在安全漏洞已被弃用(如SSL 3.0的POODLE攻击)。
- TLS(传输层安全):SSL的继任者,当前主流版本为TLS 1.3,提供更强的加密算法和安全性。
- 术语混淆:习惯上仍称TLS证书为“SSL证书”,但实际应用中仅使用TLS协议。
总结:协议演进对比
版本 | 传输层协议 | 多路复用 | 头部压缩 | 连接特性 | 典型应用场景 |
---|---|---|---|---|---|
HTTP/0.9 | TCP | 不支持 | 无 | 单请求短连接 | 早期静态网页 |
HTTP/1.1 | TCP | 有限支持 | 无 | 持久连接+管道化 | 传统Web站点 |
HTTP/2 | TCP | 支持 | 支持 | 二进制帧+服务器推送 | 现代Web应用(如SPA) |
HTTP/3 | UDP+QUIC | 支持 | 支持 | 抗丢包+连接迁移 | 移动网络、实时通信应用 |
如需深入调试HTTPS配置或优化网站性能,可参考博客中的完整示例:HTTP与HTTPS协议入门。