Quick-Know HTTP
HTTP 影响因素: 带宽 延迟
延迟
- HOL block: 一列的第一个数据包(队头)受阻而导致整列数据包受阻
- DNS 查询: 可以通过 DNS Cache缓解
- 链接建立: 基于TCP的HTTP需要三次握手建立连接
HTTP0.9
GET
andHTML
only
HTTP1.x
HTTP1.0:
- 短连接 (默认)
- 长连接
Connection: Keep-Alive
(非官方 看浏览器支持)
HTTP1.1
短连接
Connection: close
长连接 (默认)
流水线 (被 HTTP2 multiplexing 替代)
HTTP | 1.0 | 1.1 |
---|---|---|
缓存处理 | If-Modified-Since Expires | 更多的缓存头 Entity tag If-Match If-None |
带宽优化 | 传送整个对象 | 断点续传 range头部(只传输部分) |
错误通知管理 | 新增状态码 | |
Host头部 | 无 | 无Host则400 |
长连接 | PersistentConnection Pipelining |
HTTP2
SPDY
- 多路复用: 多个请求使用同一个tcp连接
- 请求优先级: 给每个 request 设置优先级
- header压缩
- 强制TLS
- 服务端推送
Google 2012 HTTP2 base
位于 HTTP1.x 和 SSL/TLS 之间
HTTP2/SPDY
HTTP2 | SPDY | |
---|---|---|
HTTP | 可以明文 | SSL/TLS |
首部压缩算法 | HPACK | DEFLATE |
HTTP1/2
- 二进制格式(二进制分帧)
- 多路复用
- header压缩
- server push
HTTP3
QUIC
QUIC 协议(UDP based)是 HTTP/3 协议的底层协议 使用TLS1.3的密钥交换方案
应用层协议 默认使用加密
图片来自 Wiki
特点:
- 可插拔: 应用程序层面就能实现不同的拥塞控制算法。*
- 前向纠错(FEC) *
- 单调递增的 Packet Number: 使用 Packet Number 代替了 TCP 的 seq。
- 不允许 Reneging: 一个 Packet 只要被 Ack,就认为它一定被正确接收。
- 更多的 Ack 块和增加 Ack Delay 时间。
- 基于 stream 和 connection 级别的流量控制。
- 连接创建开销小: TCP+TLS1.2=3RTT QUIC=1RTT
- 单数据包加密(TCP 字节流加密 可能等待其他数据包)
- 提高网络切换期间性能(连接标识符:表示客户端与服务器的连接)
Mozilla 文档没有 暂不更新
2022.11.24 QUIC 图解
HTTPS
HTTPS = HTTPx+ SSL/TLS
TLS1.0 约等于 SSL3.0/3.1
安全问题
信息劫持 与 中间人攻击
实际问题: 需要确定浏览器收到的公钥一定是对应网站的公钥
HTTPS 引入权威机构(CA, Certificate Authority)来奠定安全的基础
网站启用HTTPS之前 申领CA的数字证书
公钥的可信
- 根证书物理方式传递给OS/Brower厂商 然后预装
- 证书信任链
- 手动安装
加密内容
- HTTP请求和响应的具体内容
外部可见内容
- HTTP请求
- TCP头部 Port
- IP头部 IP
HTTPS 流程
sequenceDiagram
participant c as browser
participant s as server
c ->>+ s : Hello
s ->>- c : Hello(CA证书 Server公钥)
Note over c : 1. 校验 证书 信息
Note over c : 2. 对比内置 CA 判断是否可信(无则报错)
Note over c : 3. 使用内置 CA 公钥解密
Note over c : 4. 计算hash 对比签名
c ->> s : 利用Server公钥加密 协商对称加密算法
Note over c,s : 使用对称加密通讯
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
图示SSL流程 具体细节
参考
HTTP x
HTTPS