http1.0和http1.1
1、长连接
http1.1支持长连接,默认打开keep-alive
,通过这个参数告诉服务器要建立长连接,在一个tcp连接中可以传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟
2、节约带宽
http1.0:客户端只需要一小部分,但服务端一次性把整个对象传送,且不支持断点续传功能。
http1.1支持只发送header信息,如果服务端验证通过返回100后,客服端才开始发送body请求,如果返回401则不用发送body请求,节约了带宽。
3、缓存处理
http1.0:主要使用header里的If-Modified-Since,Expires
来做为缓存判断的标准
http1.1:引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match
等更多可供选择的缓存头来控制缓存策略
4、host域
http1.0:http1.0默认每台服务器绑定一个唯一的ip地址,请求消息中的url没有包含主机名,不存在host域
http1.1:在一台服务器上可以存在多个虚拟主机,且他们共享一个ip地址,因此请求和响应都包含host域
,如果没有,报错。
5、新增了24个状态码
http1.1和http2.0
1、二进制编码
使用二进制进行编码
2、多路复用
HTTP1.1:多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
http2.0:采用多路复用技术,同一个连接可以并发处理多个请求,并发请求的数量比HTTP1.1大了好几个数量级
根据request的 id将request再归属到各自不同的服务端请求里面,即单个连接上同时进行多个业务单元数据的传输。
3、首部压缩
假定一个页面有100个资源需要加载(这个数量对于今天的Web而言还是挺保守的), 而每一次请求都有1kb的消息头(这同样也并不少见,因为Cookie和引用等东西的存在), 则至少需要多消耗100kb来获取这些消息头。
HTTP2.0可以维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量。
使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
HTTP1.X的头部越来越膨胀,很多都是重复且多余的,HTTP2.0可以压缩头部的大小,并且避免了重复的传输,可以大大降低延迟。
4、服务器端推送
为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。