今早在公交车上,把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. 深入理解和应用display属性(一)

    Display在官方定义:规定元素应该生成的框的类型.本文只重点分析常用的6个值:none.block.inline.inline-block.inherit.flex.其他table.list-it ...

  2. 游标的使用——mysql

    CREATE DEFINER=`root`@`%` PROCEDURE `split_category_all`()BEGIN declare categ varchar(10); ##套餐列 dec ...

  3. 总结常见的ES6新语法特性

    前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...

  4. 第一个随笔,调试中,用的CSS3

    希望能在博客园很好的学习并得到技术上的提升!

  5. 轻松掌握:JavaScript模板方法模式

    模板方法模式 假如我们有一些对象,各个对象之间有一些相同的行为,也有一些不同的行为,这时,我们就可以用模板方法模式来把相同的部分上移到它们的共同原型中(父类),而将不同的部分留给自己各自重新实现. 模 ...

  6. IBM实习

    来到北京,进入IBM实习已经好多天了,两个月的暑假,两个月夏日在这里度过了,并将在未来个一个月里面,仍将在这里走过,但是我却一无所成,现在仍然只在徘徊中游走,丹迪什么时候能真正懂得实习的难得可贵,懂得 ...

  7. Upgrade from SharePoint 2010 to SharePoint 2016

    [转]http://nikcharlebois.com/upgrade-from-sharepoint-2010-to-sharepoint-2016/ In this blog, I will go ...

  8. IOS开发之----#import、#include和@class的区别

    1. 一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include. 2. #import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题.&l ...

  9. AlertDialog的六种创建方式

    AlertDialog的六种创建方式 创建AlertDialog的步骤: 1.创建AlertDialog.Builder对象 2.调用Builder对象的setTitle方法设置标题,setIcon方 ...

  10. iOS 动画绘制线条颜色渐变的折线图

    效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...