http1.0, http1.1 和 http2 对比
http1.0
一次请求一个 tcp 连接。
支持持久化连接,但是需要显示启用。
http1.1
默认使用持久化连接。
建立一个 tcp 连接后可以发送多个请求。但是有如下限制,客户端可以不必等待响应连续发送请求,但是服务端必须按客户端发送请求的顺序依次返回对应响应,这样客户端才能对应请求与响应。所以这样还是会出现队头阻塞(Head of line blocking)。
增加 host 字段引入 Chunked transfer-coding 实现断点续传
管线化理论(pipelining),可以在一个 tcp 连接上并行发送请求(只是理论上支持,实际上都关闭了)
增加缓存处理
cache-control
http2
多路复用
一个 tcp 连接上可以并行的发送多个请求http2
使用二进制分帧来传输
报文头压缩
采用报文压缩的原因:
- 对于单个 http 报文,如果携带的通信数据较少时,报文头部远远大于有效的通信数据,导致宽带利用率低。
- 在持久化连接下传送的多个 http 报文之间,头部重复内容较多。
解决方案:
- 基于静态字典压缩。http 协议的客户端和服务端之间共同维护了一份静态字典。存储了大量常见的 http 报文头字段。然后利用静态字典的索引号代替 http 中的报文头。
- 基于动态字典压缩。静态字典并不能覆盖 http 头键值对所有的组合,这样就使用动态字典弥补。如果遇到在静态字典中不存在的 http 头部字段,此处使用非压缩传输,然后把该字段头部加入到动态字段中。当下次传输相同的头部字段时就可以使用动态字典对这个字段进行压缩。
服务器推送
三种传输技术示意图
Read other posts