HTTP/2
什么是 HTTP2
http2 是 http 的替代品,它不只是从协议面上对 http 1.x 进行重写,而是对这个广泛的线上协议进行全新的表达。同时 http2 的方法、状态码、语义与 http1.x 是相同的,并且拥有相同的 API。
http2 的注重点主要是:最终用户端感受到的具体的延迟;网络和服务器的资源利用情况。还有一个重点考虑的是能够使 web 站点到浏览器进行单一的连接。
http2 的前身是 SPDY, 当然在后续的进化中,不断的加入了全新的内容。
http 协议与计算机网络基础知识
在了解 http2 之前先极其简要了解一下相关的知识
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。属于网络应用层,底层协议使用 TCP/IP。
一次HTTP操作称为一个事务,其工作过程可分为四步:
首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

http 1.x 存在的问题
- 每次请求都要重新发起一次 TCP 连接,TCP 的第三握手请求所占用的网络资源甚至会比所传输的数据还要多。虽然后期浏览器对此做出了优化,多个请求可以使用同一 TCP,但必须按请求队列的顺序挨个传输,节省了 TCP 建立连接时间,但没有解决并发和阻塞的根本问题;
- 同域资源的并发请求数有限,一般为2-6个,根本原因是为了防止 TCP 连接过多,两端压力过大;
- 协议的报文头信息较冗长,而且不做压缩,对于短消息的传输代价很大;
- 不能传输二进制,进行明文的字符传输,传输内容受限且安全性差,导致其体质上不能作为高级传输协议;
http 2 的改进
-
TCP 连接的多路复用,同源只需建立一个 TCP 连接,所有的请求都可以通过一个 TCP 连接进行传输,同一连接内支持并发请求,还支持并发的优先级与流量控制; 
-
协议数据改用二进制,传输的内容更加自由,协议的解析和优化扩展上带来更多的优势,(物联网、智能设备的福音); 
-
对报文头强制采用 HPACK 进行数据压缩,节省流量; 
-
服务器推送,服务器可以“主动的”所需的资源推送给用户,用户不用再单独请求。比如用户请求了一个页面 DOC 包,服务器可找出页面中所需的 JS 与 CSS,并通过 response 推送给用户。 
-
* 使用 HTTPS 加密方式,对传输的数据进行加密。
(SPDY 的历史遗留方案,现在好像改为非强制加密,但目前的HTTP2服务器几乎都是采用强制加密)。
实现 HTTP2
目前 HTTP2 的技术已经很成熟,市面上各类服务器与浏览器都早已开始支持 HTTP2 。
服务器端
HTTP2 官网上给出了非常详细的支持 HTTP2 的各类服务器版本号或是相关组件: http2 服务器一览表
客户端
从2012年开始起草,到2015年正式发布,期间发布了几个草案版,各大浏览器也紧随其后的陆续在新版提供支持 以 HTTP/2 正式版为准,各浏览器支持情况如下图: 
*SSL 证书
目前大多数服务器架设 HTTP2 都需要 SSL 证书进行加密,可以去正规 SSL 机构申请一个。 在 GOOGLE 的大力推进下,HTTPS 已经非常普遍,而且也都免费了。
提供两个:
国内的:沃通