HTTP
HTTP 1.0
- 无状态、无连接
HTTP 1.1
- 持久连接
- 支持流式传输
- 增加缓存处理(新的字段如cache-control)
- 增加Host字段、支持断点传输等
- 缺点:队头阻塞:请求必须按顺序返回。高延迟下效率低下。
为了解决性能做的努力(浏览器限制))
- 多张小图合并成一张大图
- 图片内联到css或者html中
- webpack打包,将多个js文件合并成一个大的js文件
- 分片,使用不同的域名加载资源
HTTP 2.0
- 二进制分帧
- 多路复用:单连接并行传输多个请求/响应(二进制帧拆分+流ID标记)
- 头部压缩
- 服务器推送
- 请求优先级
- 缺点:仍依赖TCP,可能因丢包导致TCP层的队头阻塞。
HTTP 3.0
- 基于QUIC协议:弃用TCP,改用UDP实现可靠传输,减少握手延迟(0RTT快速重连)
- 加密:QUIC协议内置TLS 1.3,无需额外的加密套件。
- 流量控制:QUIC协议内置流量控制机制,避免拥塞。
- 多路复用:QUIC协议支持多路复用,一个连接可以同时处理多个请求和响应。
- 首部压缩:QUIC协议内置首部压缩机制,减少网络传输的开销。
- 连接迁移:网络切换(如WiFi→5G)时连接不中断。
- 流独立性:每个流独立传输,彻底解决队头阻塞。
- 缺点:UDP可能被防火墙限制(逐步普及支持中)。
HTTPS
HTTPS 客户端与服务端加密过程(简化版)
1. 客户端发起请求(Client Hello)
- 发送内容:
- 支持的 TLS 版本(如
TLS 1.3
) - 支持的加密套件(如
AES_256_GCM_SHA384
) - 随机数(
Client Random
)
- 支持的 TLS 版本(如
2. 服务端响应(Server Hello + Certificate)
- 返回内容:
- 选定的 TLS 版本和加密套件
- 随机数(
Server Random
) - 数字证书(包含服务端公钥、域名、CA 签名等)
3. 客户端验证证书
- 验证步骤:
- 证书是否由受信任的 CA 签发(如 Let’s Encrypt)
- 证书域名是否与访问域名匹配
- 证书是否在有效期内且未被吊销
4. 密钥交换(Key Exchange)
- 客户端生成 Pre-Master Secret,用服务端公钥加密后发送
- 服务端用私钥解密获得
Pre-Master Secret
- 会话密钥生成:双方基于
Client Random
+Server Random
+Pre-Master Secret
生成相同的对称密钥
5. 加密通信(对称加密)
- 使用会话密钥(如
AES-256
)加密后续通信 - 每条消息附加 HMAC 校验完整性
tls1.2 tls1.3
TLS 协议版本对比
特性 | TLS 1.1 (2006) | TLS 1.2 (2008) | TLS 1.3 (2018) |
---|---|---|---|
安全性 | 低(已知漏洞) | 中(需配置) | 高(强制安全) |
加密算法 | 支持 RC4、MD5(不安全) | 支持 SHA-256、AEAD | 仅 AEAD(如 AES-GCM、ChaCha20) |
握手速度 | 慢(完整 RTT) | 慢(完整 RTT) | 1-RTT(可 0-RTT) |
前向安全性 | 不支持 | 可选(如 ECDHE) | 强制启用 |
已知漏洞 | BEAST、POODLE | FREAK、Logjam | 无重大公开漏洞 |
兼容性 | 已被主流弃用 | 广泛支持 | 现代浏览器/服务器支持 |
tls1.3解决的问题
- 减少握手延迟
- 加密更多的握手
- 删除一些有安全性的功能
- 完全依赖临时密钥(ECDHE),确保即使私钥泄露,历史通信仍安全。