- 默认长连接
- 同时打开多个TCP连接
- 支持流水线pipeline (存在阻塞问题,所以几乎没人用)
- 支持虚拟主机
- 支持分块传输文件
- 新增缓存指令 max-age Etag
- 二进制分帧
- 首部压缩
- 服务端推送(请求一次,返回多个文件)
- 使用UDP替换掉TCP (彻底解决阻塞问题,阻塞本质上是因为tcp的窗口)
- 连接迁移
- 0-1个RTT连接
- 前向纠错(传输十个包后,紧跟着这十个包的异或包,这样如果丢了其中一个,可以根据剩余十个来直接还原这个包。后被废除)
Expires (v1.0) Expires 后加指定日期
缺点
- 受限于客户端的时间
- 无法处理私有资源
- 无法描述 “不缓存”的语义
Cache-Control (v1.1) 优先级大于 Expries
max-age + 秒数 客户端
s-maxage + 秒数 CDN
public private
no-cache 使强制缓存失效 但协商缓存仍旧生效
no-store 禁止客户端CDN以任何形式保存资源
Last-Modified 和 Last-Modified-Since (v1.0) 使用资源的修改时间来确定,精确到秒。再次请求若未修改返回 304。
缺点是若一个文件在一秒内修改多次,则会失效。
Etag (v1.1) 优先级大于Last-Modified
对文件做摘要计算。意味着每次请求都需要计算一遍。
header + payload + signature
缺点
- 令牌难以主动失效
- 更容易遭受到重放攻击
- 只能携带相当有限的数据(http无限制,但服务器、浏览器一般有限制)
- 必须考虑令牌在客户端如何存储
- 无状态也不总是好的,例如统计实时在线人数
使用时间戳+随机数 nonce,保证时间范围内随机数不重复。
- 设置cookie为 http only
- 转义特殊字符
- 检查Referer
- 校验token
- 验证码
转义特殊字符
- RSA 使用证书密钥。不具有前向安全性,过于依赖私钥,若私钥泄露之前的会话也会被破解
- DH
- 建立连接定时器
- 重传定时器
- 延迟应答定时器
- 坚持定时器(对方窗口为0时 定时探测)
- 保活定时器 keep alive
- FIN_WAIT_2 定时器
- TIME_WAIT 定时器
- 可靠传输-超时重传
- 流量控制-滑动窗口
- 拥塞控制-慢开始、拥塞避免、快重传、快恢复