关于http:HTTP2-的一些关键性能提升点
HTTP/2是HTTP协定自1999年HTTP 1.1的改进版RFC 2616公布后的首个更新,前身是SPDY协定(Google),于2015年2月17日被批准。 HTTP/2规范于2015年5月以RFC 7540正式发表,少数支流浏览器曾经在2015年底反对了该协定。目前国内外大多数网站也都曾经反对了HTTP/2,比方 Google/Stackoverflow/Reddit,国内的 淘宝/Segmentfault/掘金/CSDN/博客园/36Kr等等都曾经全面反对了HTTP/2协定 HTTP/2 相比HTTP/1 来说,次要是性能上的大幅晋升,而且齐全没有没有改变 HTTP/1协定中的利用语义。 Method、State Code、URI 和Header等外围概念齐全没有变动 上面具体介绍HTTP/2 中的一些要害降级点 二进制的分层(Binary Framing Layer)Binary Framing Layer 的设计,算是HTTP/2性能晋升的外围了。HTTP/2中在应用层又设计了一套BinaryFrame Layer,它定义了HTTP音讯在传输过程中的封装形式。不过这个Frame Layer和TCP 的 Packet可不是一回事,这个Frame Layer只是逻辑上的分层,在HTTP和TCP层之间,相似于Http Chunk 如上图所示,HTTP/2中的报文,在传输前都会被先构建成一个个的帧(Frame),每次Socket发送的最小单位是一个帧,每个帧都以二进制格局进行编码 二进制格局编码(Binary format encode)在HTTP/1中,数据都是以文本编码的模式进行传输的。那么什么叫文本编码,什么叫二进制编码呢? 举个例子,协定中有一个长度的首部值为 11 ,这个数字在文本编码中(用字符串来示意),它会占用2个Byte,对应的字节为[49, 49],那么在二进制编码下,11如果是Unsigned Int类型,那么它会占用4个Byte,对应的字节为[0, 0, 0, 11] 。 下面这个例子,看起来二进制编码下占用更大了;其实大多数状况下,二进制编码的占用会更低。如果换个大点的数字2147483647,在文本编码下须要占用10个Byte,可二进制编码下还是只须要占用4个Byte 文本编码(Byte Array)二进制编码(Byte Array)11[49, 49][0, 0, 0, 11]2147483647[50, 49, 52, 55, 52, 56, 51, 54, 52, 55][127, -1, -1, -1]二进制格局这个叫法尽管比拟容易引起歧义,不过大家都这么叫,那就是对的 不过既然都用二进制编码了,那么还能叫超文本传输(HyperText Transfer )吗…… 比方在HTTP/1中,有一个Chunk编码,和下面提到的Binary Framing Layer有些类似,都是在TCP之上加了一层逻辑层。Chunk编码中有一个Length字段,就是用文本编码的,但Binary Framing 中的长度和其余字段都是用二进制编码,所以这也是HTTP/2新增的逻辑层叫Binary Framing的起因吧 ...