http/2的发展和使用
背景
2012年时谷歌推出了spdy/2协议,这个协议就是http/2发展的前身。2015年9月nginx开始正式推出了http/2替换spdy(nginx 1.9.5). http/2是从http/1.x开始最大版本的更新,国内貌似还没有将http2作为主流,依然使用这http/1.1。这个背后肯定是有着底层原因。对比http1.1,它一样也有优势和劣势。
介绍
http/2的新功能有哪些?
1.多路复用
2.头部压缩
3.原生二进制
4.优先级传输机制
多路复用
将同一个host的请求合并在一个TCP连接中,这样就不用为多个请求建立连接,因为请求和响应都在一个连接中,所以这样就需要区分请求和响应的对应,http/2的实现中,采用为每个请求带上标识信息和数据大小,这样服务端才能区分请求。多路复用好处肯定很明显,减少连接的建立,建立连接就要握手,而握手是很耗费性能的,现在大部分的客户端和服务器都只支持在TLS上的http/2,因为TLS的连接建立会麻烦点,https中需要2次RTT的时间,而http/2中在TLS上扩展了APLN协议,减少了握手次数,只需要一次RTT时间,对于明文传输的情况,握手还是一样,所以在http/2没有节省多少时间,但是多路复用也有劣势,因为需要标识信息,所以多了额外的数据传输,如果只有一条数据流的情况,多路复用就没有很大的优势。
头部压缩
http/2支持将头部数据压缩,这看起来节省了数据量传输,但是这只在cookie很大的情况才真的有用,因为压缩意味着需要解压,这给服务器也带来了内存和计算的压力,内存压力在于头部压缩是有状态的,需要存储一些解压和压缩的信息。
优先级机制
这个机制解决了多路复用中哪个响应对应哪个请求的问题
什么时候使用它
从上面的测试结果来看,对于低延迟的环境和开启了keep-alive的情况下,是不需要升级到http/2的。
HTTP/2需要ALPN Application‑Layer Protocol Negotiation 扩展,该扩展只在OpenSSL 1.0.2被支持。