HTTP2.0
HTTP/2(超文本传输协议第2版,最初命名为HTTP2.0),是HTTP协议的第二个主要版本。HTTP/2是HTTP协议自1999年HTTP1.1发布后的首个更新,主要基于SPDY协议。
HTTP2.0的特点是:在不改动HTTP语义、方法、状态码、URI及首部字段的情况下,大幅度提高了web性能。
HTTP站在TCP之上
理解http协议之前一定要对TCP有一定基础的了解。HTTP是建立在TCP协议之上,TCP协议作为传输层协议其实离应用层并不远。HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性。比如TCP建立连接时三次握手有1.5个RTT(round-trip time)的延迟,为了避免每次请求的都经历握手带来的延迟,应用层会选择不同策略的http长链接方案。又比如TCP在建立连接的初期有慢启动(slow start)的特性,所以连接的重用总是比新建连接性能要好。
帧(frame)和流(stream)。
帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流是多个帧组成的数据流。
所谓多路复用,即在一个TCP连接中存在多个流,即可以同时发送多个请求,对端可以通过帧中的表示知道该帧属于哪个请求。在客户端,这些帧乱序发送,到对端后再根据每个帧首部的流标识符重新组装。通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。
多路复用的作用:
打开网页的时候
在 HTTP/1.1 协议中 「浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞」。
传统的HTTP1.1打开页面时,需要请求多个资源,每个资源都要发送一个HTTP请求,这样会阻塞。
HTTP2.0会在同一时间发送多个frame,每个frame有自己的流,每个流是一个请求,但是每个frame是乱序发送的,需要服务器来自己组装。
Headers的压缩
前面提到过http1.x的header由于cookie和user agent很容易膨胀,而且每次都要重复发送。http2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。高效的压缩算法可以很大的压缩header,减少发送包的数量从而降低延迟。
HTTP2.0结论
HTTP2.0和WS是两个不同的东西,WS是基于HTTP1.1之上的,并且阿里云SLB上的WS也是约束ECS后端需要采用HTTP/1.1
HTTP2.0和WS虽然都是用帧的方式来传输数据,但是他们有各自的帧格式,不能共用。
WS协议是一个HTTP/1.1的协议头握手之后,后面采用WS帧的格式来通信,主要用于长连接通信
HTTP2.0是将所有的Headers和body拆开来压缩之后,采用HTTP/2.0格式的帧来通信,并且会将这些帧乱序发送,相当于一个协议被拆解成多个乱序的帧,服务器收到帧之后,需要根据帧头部的SteamID来自行组装,最终组装成一个完整的协议。在 HTTP/1.1 协议中 「浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞」。HTTP2.0的多路复用是为了解决web请求复数资源的问题
参考:
阿里云HTTP/2.0支持
HTTP/2.0相比HTTP1.1有什么改进