做者:较瘦@毛豆前端前端
HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工做小组进行开发。该组织于2014年12月将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表git
HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式,二进制协议解析起来更高效。 HTTP/1 的请求和响应报文,都是由起始行,首部和实体正文(可选)组成,各部分之间以文本换行符分隔。HTTP/2 将请求和响应数据分割为更小的帧,而且它们采用二进制编码。github
HTTP/2 中,同域名下全部通讯都在单个链接上完成,该链接能够承载任意数量的双向数据流。每一个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间能够乱序发送,根据帧首部的流标识能够从新组装。浏览器
多路复用,代替原来的序列和阻塞机制。全部就是请求的都是经过一个 TCP链接并发完成。 HTTP 1.x 中,若是想并发多个请求,必须使用多个 TCP 连接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP连接请求限制服务器
这一特性,使性能有了极大提高:并发
同个域名只须要占用一个 TCP 链接,消除了因多个 TCP 链接而带来的延时和内存消耗。性能
单个链接上能够并行交错的请求和响应,之间互不干扰。编码
在HTTP/2中,每一个请求均可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就能够在处理不一样的流时采起不一样的策略,以最优的方式发送流、消息和帧。cdn
HTTP/2的另外一个强大的新功能是服务器为单个客户端请求发送多个响应的能力。也就是说,除了对原始请求的响应以外,服务器还能够向客户端推送额外的资源,而不须要客户端明确请求每个资源!例如服务端能够主动把JS和CSS文件推送给客户端,而不须要客户端解析HTML时再发送这些请求blog
每一个HTTP传输都包含一组描述传输资源及其属性的标题。在HTTP/1.x中,此元数据始终以纯文本形式发送,而且每次传输的开销都会在任何位置增长500-800字节,若是使用HTTP Cookie,则会增长数千字节。为了减小这种开销并提升性能,HTTP/2使用两种简单但强大的技术使用HPACK压缩格式来压缩请求和响应头元数据
HTTP/2经过支持请求与响应的多路复用来减小延迟,经过压缩HTTP首部字段将协议开销降至最低,同时增长对请求优先级和服务器端推送的支持。