HTTP2.0
今天了解到实际上推出了HTTP2.0,而HTTP与我们开发人员来说实际上是息息相关的,也就是我们需要关注业内最新的网络技术,这对后台开发而言是很重要的。
先说差异,HTTP2.0相比于HTTP1.x,给我们程序员提供了主要以下几个优点:
-
压缩头部。HTTP1.x的头部在现在日趋膨胀,比如cookie的发送,每次都要占据大量的内容,HTTP2.0针对头部进行了数据压缩,以及在客户端和服务器共同维护一个发送的头部表,再次发送时候只需要发送序列号就好,减少了大量重复的头部的发送。
-
服务端主动push。在之前的HTTP的模型中,资源的请求是单向的,只有客户端发送请求,服务器端回答。而HTTP2.0之后,服务器端可以主动push给客户端,比如在第一次请求html的时候把图片、css等静态资源发送给客户端,可以减少一次HTTP的请求。但同时也存在问题,客户端不需要的如果服务器端继续发送,会导致无用,解决方法可以是客户端发送一个小的报文给服务器端自己不需要的。
-
多路复用。跟网络io的io多路复用不同,HTTP2.0的多路复用是可以让多个请求同时发送出去。**之前的HTTP的模型是一个请求一个回复,要等回复完之后再继续发请求,同时每个域名下浏览器会做连接数量限制,于是比如100个图片,如果放在一个域名下,也就只能同时只有几个连接存在,但如果进行域名分片,就可以同时有多个连接。**新的HTTP2.0请求的模型实际上会不改变原来HTTP的外观,那如何做到多路复用呢?HTTP2.0将HTTP请求分成更小的片,然后在网络中发送出去,每个请求的小片拥有同一个id,而我们可以把这些小片封装成一个HTTP请求,于是就是一个请求实际上是有多个请求发生,这也就是对客户端是没有什么特别大改变的。同时会配有优先级,可以优先处理,比如当网页资源100个图片,前面的先发送了,但我立马划到下面,就得把下面的图片请求优先级调高。
-
新的二进制协议。新的采用完全二进制协议。原本的HTTP是基于文本的,而文本的表现形式是有多样性的,我的理解比如像redis的二进制安全,取消了中间分隔符的影响,全部存储成为二进制不考虑语句含义。新的协议格式下列。
http2.0的格式定义更接近tcp层的方式,这张二机制的方式十分高效且精简。length定义了整个frame的开始到结束,type定义frame的类型(一共10种),flags用bit位定义一些重要的参数,stream id用作流控制,剩下的payload就是request的正文了。