learning_notes

学习笔记

View project on GitHub

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

2. 服务端响应(Server Hello + Certificate)​

  • 返回内容:
    • 选定的 TLS 版本和加密套件
    • 随机数(Server Random
    • 数字证书​(包含服务端公钥、域名、CA 签名等)

3. 客户端验证证书

  • 验证步骤:
    1. 证书是否由受信任的 CA 签发(如 Let’s Encrypt)
    2. 证书域名是否与访问域名匹配
    3. 证书是否在有效期内且未被吊销

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解决的问题

  1. 减少握手延迟
  2. 加密更多的握手
  3. 删除一些有安全性的功能
  4. 完全依赖临时密钥(ECDHE),确保即使私钥泄露,历史通信仍安全。