HTTP/2协议介绍HTTP/2起源于SPDY,主要目标是解决HTTP1.x的性能问题。与HTTP/1.1在连接明文请求上不同,HTTP/2和SPDY一样,将一个TCP连接分成若干个流(Stream),每个流可以传输若干条消息(Message),每条消息由若干个最小的二进制组成框架(Frame)。这也是HTTP/1.1和HTTP/2最大的区别。新特性:标头数据压缩HTTP标头的数据压缩服务器推送HTTP/2服务器推送流水线请求请求流水线多路复用用于在同一个TCP连接中组合多个请求在单个TCP连接上多路复用多个请求此外,HTTP/2使用二进制而不是纯文本来打包和传输客户端和服务器之间的数据。名词解析:队头阻塞(Head-of-lineblocking或简称HOL阻塞)是计算机网络领域的一种性能受限现象。其原因是一列的第一个数据包(队列的头部)被阻塞导致整个列的数据包被阻塞。例如,它可能出现在带有缓冲输入的开关中,可能由于乱序传输而出现,也可能出现在HTTP管道中有多个请求时。流水线请求流水线请求(英文:HTTPpipelining)是一种批量提交多个HTTP请求(request)的技术,在发送过程中无需等待服务器的响应。流水线请求结果允许动态改进HTML页面加载时间,尤其是在特定的高延迟连接(例如卫星互联网)上。在宽带连接中,加速不是那么明显,因为需要在服务器端应用HTTP/1.1协议:服务器端必须按照客户端请求的顺序恢复请求,这样整个连接还是先-in-first-out,可能会出现HOL阻塞,造成延迟。HTTP/2.0或SPDY中的异步操作将解决这个问题。因为可以将多个HTTP请求填充到一个TCP数据包中,所以HTTP流水线需要在网络上传输的TCP数据包更少,从而降低了网络负载。流水线机制必须通过持久连接来完成,只有GET、HEAD等请求可以流水线,非幂等方法,如POST,不会流水线。连续的GET和HEAD请求总是可以流水线处理。GET、HEAD、PUT、DELETE等一系列幂等请求是否可以流水线化取决于请求序列是否相互依赖。另外,在最初创建连接时不应启动管道机制,因为交易对方(服务器)不一定支持HTTP/1.1版本的协议。HTTP管道依赖于客户端和服务器的支持。符合HTTP/1.1的服务器支持流水线。这并不意味着服务器需要提供流水线回复,只是它不会无法接收流水线请求。多路复用多路复用(Multiplexing,又称“多路复用”)是通信和计算机网络领域的一个专业术语。在没有歧义的情况下,“多路复用”也可以称为“多路复用”。”。多路复用一般是指在一个信道上传输多个信号或数据流的过程和技术。由于多路复用可以将多个低速信道集成到一个高速信道中进行传输,从而有效地利用了高速信道。通过使用复用,通信运营商可以避免维护多条线路,从而有效节省运营成本。)根据使用的技术,HTTP/2Multiplexing是指将一个TCP连接分成若干个流(Stream)HPACK算法HPACK算法是HTTP/2新引入的一种算法,用于压缩HTTP头,其原理是:客户端和服务端根据RFC7541的附录A维护一个公共静态字典(StaticTable),其中包含公共头名称的代码以及公共头名称和值的组合;服务端按照先进先出的原则维护一个通用的动态字典(DynamicTable),可以动态添加内容;客户端和服务端根据RFC7541编码(HuffmanCoding)附录B的静态霍夫曼码表支持霍夫曼编码。服务器推送网站以减少请求次数,通常通过简化页面上的图片和脚本来实现。但是这种措施非常不方便且效率低下,仍然需要很多HTTP链接来加载页面和页面资源。HTTP/2引入了服务器推送,即服务器向客户端发送的数据多于客户端请求的数据。这使得服务器可以直接提供浏览器渲染页面所需的资源,而不需要浏览器在接收和解析页面后进行一轮请求,从而节省了加载时间。服务器支持Web服务器HTTP/2自2015年5月4日RFC7540发布以来,大多数主流Web服务器都支持HTTP/2。从nginx1.9.5开始支持HTTP/2。配置也很简单listen443sslhttp2default_server;从Tomcat-8.5开始,支持HTTP/2。
