对比http1.0
短连接,有有限的缓存机制,后期集成了长连接,也有连接并发数限制
http1.1:在连接上(使用了tcp长连接,存在tcp连接池子,后面该功能http1.0也集成支持了),connection:keep-alive/close,可减少创建来连接的时间
在多路复用上(没实现流多路复用,但是支持管道),存在极限性,很多浏览器默认禁用该功能。通过增加tcp连接数,以减轻head-of-line的问题,但是出与减轻
服务器负担和因为客户端的软硬件资源有限,浏览器限制了站点(域名)的并发连接数(google:6)
在缓存上(增加了协商缓存,优化鲜活度缓存机制)Etag, last-modify,cache-contraol 等
http状态码(增加了http状态码以达到更广阔的功能呢个支持)比如100
http2.0:为了解决什么问题设计,还有什么问题
在连接上:也是长连接(一般一个站点只创建一个)
多路复用:通过二进制分帧(frames),给请求的资源一个标识来实现多路复用,解决了http层的Head-Of-Line 问题,但是tcp层的没有解决
其他:支持head压缩/缓存(缓存后可以不携带)
支持Host域
服务器推送
支持请求优先级
缺点: 网络存在>2%丢包时,大大影响性能(一个TCP包会存在多个资源的,丢了一个包影响多个资源),阻塞等待包的过程影响其他资源的请求,tcp的队头阻塞问没有解决
开启多个tcp连接
服务端压力变大,每个tcp最大可支持256个流,意味着并发度最大可达到256
http3.0:
QUIC,快速UDP传输协议,并解决了安全和重传的问题
在连接上:支持多路复用,并且解决了传输层对头阻塞的问题,连接建连非常快
http报文:
http
head-of-line 问题:
https://zhuanlan.zhihu.com/p/330300133