HTTP2.0的新特性
HTTP2.0引入了服务端推送:例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。
新的二进制格式制:HTTP1.0的解析是基于文本,基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认识0和1的组合。基于这种考虑HTTP2.0的协议解析约定采用二进制格式制,实现方便和快捷。
多路复用:多路复用即链接共享,每一个request都是用做链接共享机制的。一个request对应一个id,这样一个链接上可以有多个request,每个链接的request可以随机的混杂在一起,接收方可以根据request的id不同将request在归属到各自不同的服务端请求里面。简单来说就是一个tcp链接里面可以同时有多个http请求,多个请求是并行执行,当一个请求严重阻塞时,不会影响其他连接上的请求正常执行
heater压缩:HTTP1.0的header带有大量的信息,而且每次都要重复发送,HTTP2.0使用encoder来减少传输的header大小。通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
HTTP2.0中的多路复用技术和HTTP1.0的长连接复用技术有什么区别?
HTTP1.0之前的版本中,所有的tcp链接都是请求一个,用完就关闭此次链接。但在HTTP1.0之后,所有的链接都是默认的长连接,请求头connection可以设置为connection:keep-alive,当请求一个页面之后,客户端和服务器之间用于传输数据的链接不会关闭,如果客户端再次访问这个服务器的网页,会继续使用这一条已经建立的链接。当然也可以关闭这一设置,connection设置为connection:close代表一个链接完成后,客户端和服务器用于传输HTTP数据的链接会关闭,如果要再次请求,则需需要重新建立链接。
HTTP1.0中用到的都是长连接复用技术,当请求一个页面之后,客户端和服务器之间用于传输数据的链接不会关闭,如果客户端再次访问这个服务器的网页,会继续使用这一条已经建立的链接。但它的缺点是如果在这一条tcp链接中有多个请求,那么只有在前面的请求完成之后,后面的请求才可以执行;若是有一个请求严重阻塞,那么后面的请求就会被阻塞。
HTTP2.0中用到的多路复用技术就缓解了上面的问题,多个请求可同时在一个tcp连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;