今早在公交车上,把http2的官方讲解文档(还在草案之中)看了一圈,发现相对http 1.1确实改进了不少,完整的文档可通过:://www.gitbook.com/book/ye11ow/http2-explained/details 下载
 
把其中的主要思路结合我个人的理解,记录在这里(初次接触,可能有理解不正确的地方,如有不妥,欢迎指正)
 
1、 多路复用
下面这二张图很形象,http2中发送数据是基于帧的,每个帧又对应着一个“流“,下面这二列火车好比二个流,传统方式下,要传输二个流,有可能要发送二次数据(或者创建2个连接)。
在http2里,这二个流,可以串在一起,类似下图,这样发送一次就行了,即实现了所谓的多路复用,这样带来的直接好处是:不需要创建太多的TCP连接(创建TCP连接代价很高的),能省下不少的连接资源。
 
 
2、流的优先级和依赖性
每个流可以指派流的优先级(这个过程可以是动态的),比如在页面上切换tab页时,可以把将要显示的的图片对应的流,优先级增加,以加快显示,改善用户体验,另外每个流依赖其它哪些流,也可以指定。
 
 
3、头压缩
一张网页的加载过程中,可能会很多的http请求,每个请求中,都会包含一些重复的头信息(比如:cookie信息),十分浪费,http2可以将这些重复的内容压缩,提升性能。
 
4、服务器推送
这其实是服务端的一个智能预测,比如浏览器在加载资源X时,服务器如果知道浏览器很可能也会需要资源Y,那么服务器可以主动把资源Y推送给浏览器缓存起来,这样以后要用资源Y的时候,用户感觉就会很快。
 
5、备选服务
在负载均衡的情况下,会有多个server在提供服务,但是一个TCP连接总归只能连接到一个Server,在http2下长连接估计会成为趋势,这样的话,不利于负载"均衡"的整体性能发挥,如果服务端想建议客户端连接到另一个节点,可以用Alt-Svc头来告诉客户端有另一个备选服务器
 
上述这一堆改进最终的目的,我个人理解就是一句话:“更少的TCP连接,更快的传输”,如果http2流行以后,传统的一些优化手段,比如css sprit,把多个小js文件合并成一个文件这些技巧就没必要了,因为“多路复用”,本身就能把多个小文件串在一起,在同一个帧中发送,而不至于增加TCP连接。
 
潜在的副作用:
1、目前只支持TLS,即只能通过https:// 安全连接,这会带来额外的开销。
2、内容是二进制的,看起来不如以前直观,调试起来不如http 1.1方便
 
目前的支持情况:
1、浏览器方面,Firefox、Chrome最新版本已经实现了http 2,其它浏览器比如:Safari,IE,Opera宣称也会跟进,所以浏览器方面的普及应该不是什么大问题 
2、服务器方面,目前只有H2o支持了,Apache,Nginx目前还没有跟上。
 
另外,值得一提是Google的开源项目gRPC,就是在 protobuf + http2 实现的RPC框架。
 
最后,http 2被设计为与http 1.1完全兼容(没办法,现在还是 http 1.1的天下,如果不兼容,估计没人愿意尝试),所以我个人觉得这应该是一个过渡的协议,仍然背负着一些http 1.1的历史包袱,等流行之后,应该在http 3里会做一些激进的改进,就象html 4到html 5的飞跃一样。

让 http 2来得更猛烈些吧的更多相关文章

  1. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧

    注意:有网友提出部分项目停止更新的事情,这个问题我特意注意过,很多都是小功能组件,功能稳定,没有bug,没更新是正常的.够用就行了.其次技术支持的事情,对开源免费来说,不能太强求,这里发布的都是小功能 ...

  2. 让这三个月来的更猛烈些吧,前端react同构项目

    昨天一篇文章讲述了我在这三个月中由.net到java的过程,其中踩坑填坑的细节真不是三言两语可以道尽,而完成时的喜悦也远非寻常可比(仅次于涨工资).然而到这并不算完结,作为前后端分离的忠实粉丝,我认为 ...

  3. git stash让bug来的更猛烈些吧

    git stash可以用来暂存当前正在进行的工作,比如想pull最新的代码,又不想加新commit, 或者有一个紧急的bug需要修复,但是这个bug又与你已经在做的工作(还没完成)有关联.这个时候有的 ...

  4. 让HTML5游戏来的更猛烈些吧!--青岛思途

    作为著名的网页游戏门户,Kongregate在业界也算是鼎鼎大名了.小编与它的初识应是在几年前,只记得当时其平台上的游戏基本都是需要Flash的支持,可前几天,Adobe宣布计划停止Flash的更新和 ...

  5. 怎么让dedecms生成html页面更快些

    如何让织梦生成html页面更快些呢? 1.把文章模板里的“相关文章”.“热点文章”.“推荐文章”这类的标记删除了,用其它方式,如:shtml.js 引入 2.把织梦模板里用标记表示的模板路径.php附 ...

  6. 让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句

    前言 EF通过linq和各种扩展方法,再加上实体模型,编写数据库的访问代码确实是优美.舒服,但是生成的sql不尽如意.性能低下,尤其是复杂些的逻辑关系,最终大家还是会回归自然,选择能够友好执行sql语 ...

  7. iOS 让CoreData更简单些

    原文:http://www.cocoachina.com/ios/20170421/19096.html 前言 本文并不是CoreData从入门到精通之类的教程, 并不会涉及到过多的原理概念描述, 而 ...

  8. 让EFCore更疯狂些的扩展类库(二):查询缓存、分部sql、表名替换的策略配置

    前言 上一篇介绍了扩展类库的功能简介,通过json文件配置sql语句 和 sql语句的直接执行,这篇开始说明sql配置的策略模块:策略管理器与各种策略的配置. 类库源码:github:https:// ...

  9. c++:printf和cout那个更好更快些

    现在群里在讨论cout和printf那个快的问题,但我个人觉得printf好: 因为:printf对于一些数据大,以及保留小数位,字符……可以显示出明显的优势如“%s %d %c…………” 虽然pri ...

随机推荐

  1. 变通实现微服务的per request以提高IO效率

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  2. 在 Visual Studio 等编辑器/IDE中自动切换输入法,不需要手动的有没有?

    使用Visual Studio写代码,经常遇到的一个问题就是切换中文输入法麻烦,输入完注释//,要切换到中文,输入完引号,要输入中文,然后还需要切换回来,有没有? 有时候中文输入法忽然失效有没有?明明 ...

  3. java集合-补充HashMapJDK1.8

    在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素.在最坏的情况下,这种方式会将HashMap的get方法的性能从O(1)降低到O ...

  4. 操作数数据类型 ntext 对于 max 运算符无效

    SoStyle.chi_description AS chi_description, SoStyle.description AS eng_description, SoStyle.chi_qual ...

  5. 【webapp的优化整理】要做移动前端优化的朋友进来看看吧

    单页or多页 本文仅代表个人观点,不足请见谅,欢迎赐教. webapp 小钗从事单页相关的开发一年有余,期间无比的推崇webapp的网站模式,也整理了很多移动开发的知识点,但是现在回过头来看,weba ...

  6. ViewPager+GridView实现横向滑动 仿大众点评

    先看演示效果: 1  ViewPager类提供了多界面切换的新效果. 新效果有如下特征: [1] 当前显示一组界面中的其中一个界面. [2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界 ...

  7. html5快速入门(二)—— CSS简介

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  8. sp_addlinkedserver '(null)' is an invalid product name

    使用SSMS 2008客户端工具逆向生成了创建链接服务器的脚本时,在测试环境执行是报如下错误:'(null)' is an invalid product name. USE [master] GO ...

  9. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  10. Ambari server:无法显示内存,CPU等使用率

    Ambari server安装完毕后,都能正确显示各种信息.运行了几天后,发现无法显示内存,CPU等信息. 查找日志发现有错误,日志路径:/var/log/ambari-server/ambari-s ...