HTTP/2协议在2015年就已经正式被发表了,可是如今有许多网站仍是采用的http/1.1协议,都9102年了,确认不升级一下吗?想必该有人问了,为啥要升级,http/1.1用的好好的,http/2有啥优点?css
首先来看一下http/1.1的缺点,也就是http/2的优点所在了。html
对头阻塞(Head-of-line blocking) HTTP/1.1协议虽然能够在同一个TCP链接上发送多个请求,可是这多个请求是有顺序的,必须处理完第一个请求才会响应下一个请求。若是第一个请求处理的特别慢,后面的全部请求就须要排队。nginx
TCP 链接数限制 对于同一个域名,浏览器最多只能同时建立 6 ~ 8 个TCP链接。若是一个页面有十个请求同时发送,那么只能等第一次的 6 ~ 8 个请求都返回了才能继续接下来的 2 ~ 4 个请求。这怎么能行?域名分片
技术应运而生。就是把资源分配到不一样的域名下(能够是二级子域名),这样就解决了限制,愉快~可是滥用域名分片技术也不行,由于每一个TCP链接也是很费时的(这个你们都懂的)。算法
Header 内容繁多,有时有可能会超过响应内容,而且每次有许多字段都是重复传输。浏览器
HTTP/1.1是文本协议传输,不够安全。安全
基于以上缺点,也出现了许多优化手段:雪碧图、合并脚本和样式表、资源内联、域名分片等优化工做,可是若是HTTP协议足够好的话,本能够避免这些额外的操做。服务器
http2相比于http/1.1的新特性包括:markdown
下面来一一介绍。优化
HTTP/2 复用 TCP 链接,在一个链接里,客户端和服务器均可以同时发送多个请求或回应,这些请求或回应在逻辑上分红了不少流(stream),每一个流中能够传输若干消息(Message),每一个消息由若干最小的二进制帧(Frame)组成。并且不用按照顺序一一对应(可是同一个请求或响应的帧必须是有序的,不一样的能够无序),这样就避免了"队头堵塞",减小了 TCP 链接数量和 TCP 链接慢启动形成的问题。http2还能够对stream指定优先级,优先级越高的越先响应。好比能够把js和css的优先级设置的高一些,让他们优先下载并执行。优先级也能动态的修改。网站
多路复用图:
HTTP是无状态的,每次请求都须要附带一些信息。可是许多字段都是重复的,会浪费带宽影响速度。 HTTP/2对头部信息采用HPACK压缩算法来减小报文头的大小。具体作法是把报文头信息中常见的名和值对应一个索引,维护了一张静态字典,index从1到61,好比把:method:GET映射成2,这样就能达到压缩头部的做用。可是对于一些动态的资源,好比,user-agent,须要维护一份可动态添加内容的共同动态字典,这份动态字典在数据传输的过程当中逐步创建,index从62开始。而后将映射以后的数据用huffman编码。
静态字典表:
之前是客户端向服务器请求什么,服务器就发送什么,十分吝啬。如今有了服务端推送,客户端向服务端要了一滴水,服务端能够返回整个森林。 这容许服务器直接提供浏览器渲染页面所需资源,而无须浏览器在收到、解析页面后再提起一轮请求,节约了加载时间。好比浏览器向服务器请求一个页面,以前须要等到浏览器收到页面解析html后,发现里面引用了静态资源,浏览器再向服务器发送静态资源的请求。可是如今服务器能够直接将页面和所需的静态资源一并返回。
服务端推送须要开发人员手动配置,以前介绍的多路复用、头部header压缩这两项浏览器和服务器能够自行实现,不须要开发人员关心。
nginx开始HPPT/2很是简单,只需在HTTPS设置后加上http2便可。
server {
listen 443 ssl http2;
}
复制代码
讲了HTTP/2这么多的优势,客官肯定不升级一下吗?升级以后就能够对雪碧图、合并脚本和样式表、资源内联、域名分片这些优化say goodbye了。之后谁再问你网站优化都有哪些方法,上面的几种就不要再说了。