今早在公交车上,把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. 【工业串口和网络软件通讯平台(SuperIO)教程】三.二次开发流程

    1.1    二次开发流程图 1.2    引用相关组件 找到“开发包”,引用里边的相关组件.如下图: 1.3    开发设备驱动模块 1.3.1    开发发送协议驱动 继承SuperIO.Devi ...

  2. POI导入导出

    一.使用POI导出Execl表格 需要的jar包 package cn.yxj.poi; import java.io.FileOutputStream; import java.util.Date; ...

  3. (原) 2.1 Zookeeper原生API使用

    本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...

  4. jQuery切换网页皮肤保存到Cookie实例

    效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/25.htm 以下是源代码: <!DOCTYPE html PUBLIC "-//W3C//D ...

  5. CSS中越界问题经典解决方案

    8.CSS相关知识 (1)如何解决父元素的第一个子元素的margin-top越界问题 1)为父元素加border-top: 1px;——有副作用 2)为父元素指定padding-top: 1px;—— ...

  6. 【一次面试】再谈javascript中的继承

    前言 面向对象编程是每次面试必问的知识点,而前端js如何实现继承每次命中率高达80% 这不,近两天我们面试时候,同事就问道面试者此问题,但是,不论之前自己做的回答,还是面试者的回答,基本都不太令人满意 ...

  7. 两种文件上传的实现-Ajax和form+iframe

    前言 话说现在很多很多项目需要用到文件上传,自从有了HTML5之后,上传就变的超级简单了.HTML5支持多图片上传,而且支持ajax上传,而且支持上传之前图片的预览,而且支持图片拖拽上传,而且还是纯粹 ...

  8. 2-1 git合并 打tag

    tag常用命令(仅供参考): git tag -a V1.4 -m "1.4" 创建一个tag git tag 查看本地tag git tag -d V1.1  删除本地tag g ...

  9. Android Support Library介绍

    v4 Support Library 这个库是为Android 1.6(API版本为4)及以上的版本设计的,它包含大部分高版本中有而低版本中没有的API,包括application component ...

  10. IOS开发之Bug--遇到一个类型不确定的bug

    下面的问题不大,是我在开发中遇到的问题: 然后我就google搜一下这个报错 . 下面就解决了: