更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。css
HTTP/2的开发基于SPDY进行跃进式改进在诸多修改中,最显著的改进在于,HTTP/2使用了一份通过定制的压缩算法,基于霍夫曼编码,以此替代了SPDY的动态流压缩算法,以免对协议的Oracle攻击——这一类攻击以CRIME为表明。此外,HTTP/2禁用了诸多加密包,以保证基于TLS的链接的前向安全(参考Wiki)html
2015年9月,Google宣布了移除对SPDY的支持,拥抱 HTTP/2,并将在Chrome 51中生效。算法
HTTP/2和HTTP/1.1的速度对比,能够点击查看下面两个网页:浏览器
https://http2.akamai.com/demo缓存
http://http2.cdnpe.com/index.html安全
在HTTP/1.1中,当请求a文件时,b文件只能等待,等待a链接到服务器、服务器处理文件、服务器返回文件,这三个步骤。咱们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。服务器
此项计算有一个前提条件,就是浏览器和服务器是单通道传输微信
在HTTP/1.1的协议中,因为传输的request和response都是基本于文本的,这样就会引起一个问题:全部的数据必须按顺序传输,好比须要传输:hello,只能从h到o一个一个的传输,不能并行传输,由于接收端并不知道这些字符的顺序,因此并行传输在HTTP1.1是不能实现的。并发
此外,队头阻塞问题在HTTP/2终于获得解决。
队头阻塞问题:每一个 TCP 链接同时只能处理一个请求 - 响应,浏览器按 FIFO 原则处理请求,若是上一个响应没返回,后续请求 - 响应都会受阻。为了解决此问题,出现了 管线化 - pipelining 技术,可是管线化存在诸多问题,好比第一个响应慢仍是会阻塞后续响应、服务器为了按序返回相应须要缓存多个响应占用更多资源、浏览器中途断连重试服务器可能得从新处理多个请求、还有必须客户端 - 代理 - 服务器都支持管线化。高并发
HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,这样浏览器收到数据以后,就能够按照序列对数据进行合并,而不会出现合并后数据错乱的状况。一样是由于有了序列,服务器就能够并行的传输数据,这就是流所作的事情。
此外,HTTP/2里的每一个stream均可以设置依赖 (Dependency)和权重,能够按依赖树分配优先级,解决了关键请求被阻塞的问题
咱们假设Apache设置了最大并发数为300,由于浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51我的访问时,就须要等待前面某个请求处理完成。
咱们来看一下,HTTP/2的多路复用是如何解决的。
HTTP/2对同一域名下全部请求都是基于流,也就是说同一域名无论访问多少文件,也只创建一路链接。一样Apache的最大链接数为300,由于有了这个新特性,最大的并发就能够提高到300,比原来提高了6倍!
此外,HTTP/2支持服务器推送。
浏览器发送一个请求,服务器主动向浏览器推送与这个请求相关的资源,这样浏览器就不用发起后续请求。
这主要是针对资源内联作出的优化,相较于HTTP/1.1 资源内联的优点:
Header内容内容多,并且每次请求Header不会变化太多,没有相应的压缩传输优化方案
使用HPACK算法来压缩首部内容。
雪碧图,文件合并同理能够弃用
更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。