对HTTP1.0、HTTP1.1和HTTP2.0的区别做出一个总结
一 特点
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。
影响http的因素如下:
- 浏览器阻塞(HOL blocking):早期的浏览器会限制同一个域名的最大连接数,超过将会被阻塞住;
- DNS 查询(DNS Lookup):通过浏览器缓存,本地hosts文件,DNS服务器将域名转为IP地址的过程;
- 建立连接(Initial connection):TCP的三次握手;
二 对比
1 http1.0和http1.1
- 缓存处理:更多的缓存控制策略(http1.0是If-Modified-Since,Expires,http1.1增加Entity tag,If-Unmodified-Since, If-Match, If-None-Match)
- 带宽优化及网络连接的使用:http1.1引入了range头域,支持断点续传
- 错误通知的管理:http1.1新增24个错误响应码,点此查看常见响应头
- Host头处理:http1.1增加hostname;
- 长连接:HTTP 1.1支持默认开启Connection: keep-alive长连接
2 SPDY:HTTP1.x的优化
google于2012年提出的SPDY方案
- 多路复用(multiplexing):多个请求stream共享一个tcp连接的方式
- 请求优先级(request prioritization):可为每个request设置优先级
- 头部压缩算法:DEFLATE
- 基于HTTPS的加密协议传输
- 服务端推送(server push)
3 http2.0
支持明文http传输
新的二进制格式(Binary Format):HTTP1.x的解析是基于文本
header压缩:通讯双方各自cache一份header fields表,使用 HPACK,点此了解压缩具体流程
多路复用(MultiPlexing):一个request对应一个id,可并行执行,通过id区分归属
- HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;
- HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;
- HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;
服务端推送(server push)
参考文档: