Binary Frames

HTTP2 在TCP层之上 HTTP下增加了Binary Frames协议, 基于该协议HTTP Request/Response 可以被分拆成由Frame组成的Stream在TCP上传输。

Header Compression -- HPACK

使用HPACk压缩http header成二进制格式,使用静态和动态索引表来压缩Header内容。 对动态header value使用huffman算法编码成二进制格式。

详细信息可以参考:

Static Table Definition -- http://http2.github.io/http2-spec/compression.html#static.table.definition

Huffman Coding -- http://http2.github.io/http2-spec/compression.html#huffman.code

Stream & Multipexing

在同一条TCP链路上可以根据Stream的优先级,并发的错序发送不同Stream Frames

Server Push

Server可以就一个请求主动推送多个应答给客户端

Q&A

Browser和Web Server如何协商Http协议?

HTTP2 SPEC 3.2 介绍了Client应该如何使用Http的Upgrade头域协商Http协议从1到2的升级。

For example,

1. Client to Server

     GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

2. Server to Client

  If YES for upgrading to HTTP/2,

   HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: h2c [ HTTP/2 connection ...

  If NO for upgrading to HTTP/2

  

     HTTP/1.1 200 OK
Content-Length: 243
Content-Type: text/html ...

借用Jerry Qu那个博客的总结,大概应该是这样:Browser使用Http1来问Server能不能Upgrade 到 h2c(httpd2), 如果可以,Server 就用http1.1回一个101,表示我能,那么接下来Browser就可以使用http2和Server通信,否则Server就回一个200,继续走http1咯。。。

Server Push如何工作?

HTTP/2 Server Push 定义讨论了Server Push的功能规范,但是没有具体讨论什么时候该如何使用该功能。

Jerry Qu的这篇博客就如何使用Server Push功能的进行了简单讨论。正如博客所说,具体的做法有很多种,比如Server端定义一些策略或通过学习来决定什么时候如何发送Push Response。另外就是客户端可以使用x-push-serve头域来请求Sever端应该使用Push方法发送应答。

参考

0. HTTP 2

https://hpbn.co/http2/

1. HTTP2 RFC

https://tools.ietf.org/html/rfc7540#page-12

2. HPACK

http://http2.github.io/http2-spec/compression.html

HTTP/2 带来的新颖的更多相关文章

  1. 浅谈短视频APP的发展趋势

    2014年6月20日,在AppAnnie最新发布5月应用指数中,美拍荣登“非游戏类iOS榜单”全球下载量第一位置,成为全球iOS应用商店最热门APP.能在<AppAnnie应用指数>这份A ...

  2. C++如何解析函数调用

    C语言是一个简单的语言.用户针对每一个函数,只能设置一个唯一的函数签名.但是C++而言,就给了我们很多的灵活性: 你可以将多个函数设置为相同的名字(overloading) 你可以使用内置操作符重载( ...

  3. 【转】如何建立一个样式新颖的CSS3搜索框

    在线演示 搜索框大概是web开发中最常用的UI元素之一,我想基本没有必要去介绍如何使用它.无论是网站还是web应用,都会为了增强用户体验而添加它,那么你是不是也想过设计一个别致的搜索框? 在今天的文章 ...

  4. 新颖的O2O商业模式,江水平和他的装修队

    文/秦刚 江水平是我微信上的朋友,有一天他给我留言说,秦刚老师我觉得你应该采访我,因为我的商业模式非常新颖有趣,应该能够给很多创业者启发. 我让江水平把他的商业模式写给我,他效率很高,一天就写好给我了 ...

  5. OLED带来全新视觉体验

    2013年1月,在国际消费电子展(CES)上世界首款曲面OLED电视--LG OLED电视亮相,LG Display将曲面与OLED完美结合的面板技术让显示设备的外观和品质都达到了一个全新的高度,惊艳 ...

  6. .NET 4.6.2正式发布带来众多特性

    虽然大多数人的注意力都集中在.NET Core上,但与原来的.NET Framework相关的工作还在继续..NET Framework 4.6.2正式版已于近日发布,其重点是安全和WinForms/ ...

  7. float---浮动带来的影响与清除浮动带来的影响方法----在路上(20)

    使用float会带来哪些影响: 脱标:无行级块级之分: 相互贴靠:若想之间有空隙可用margin与padding: 顶边对齐: 文字环绕: 当使用float后,子标签脱离父标签,父标签就会失去高度,此 ...

  8. 日常css技巧小结(2)-- inline-block带来的迷惑

    一.问题描述 在平时布局中,inline-block使用的频率比很高,主要是因为可以让行标签设置宽高.我在布局过程中,发现了两个“问题”, 1行标签.display:inline-block之后的行标 ...

  9. Node.js 给前端带来了什么

    在软件开发领域,前端工程师曾经是一个比较纠结的职业.在Web技术真正发展起来之前的相当长一段时间里,由于技术门槛很低,前端工程师行业一直是鱼龙混杂的状态.其中很多号称是Web开发者的人实际上并没有什么 ...

随机推荐

  1. 现在企业流行的java框架技术

    我将简短分析被用于支持这些框架的企业开发环境或工具箱,例如Borland JBuilder,Eclipse以及BEA Workbench.请记住,市场上有许多有关这些开发框架的图书;然而,在任何一篇文 ...

  2. Statement 与 PreparedStatement 区别

    Statement由方法createStatement()创建,该对象用于发送简单的SQL语句 PreparedStatement由方法prepareStatement()创建,该对象用于发送带有一个 ...

  3. solr入门之多线程操作solr中索引字段的解决

    涉及的问题: 建索引时有一个字段是该词语出现的次数,这个字段是放在solr里的  而我用的是多线程来进行全量导入的,这里就涉及到了多线程问题 多个线程操作同一个变量时怎样处理? 我是这样子做的 : 首 ...

  4. 安装APK报错解决方法【转】

    本文转载自:http://blog.csdn.net/zy1235678/article/details/38122827 adb install xxx.apk 报错,安装APK报错:INSTALL ...

  5. Basic Queries (LINQ to XML)

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/basic-queries-linq-to ...

  6. 【Selenium】软件测试基础(软件测试分类和工具组)firebug、firepath的安装

    白盒测试:需要了解内部结构和代码 黑盒测试:不关心内部结构和代码 灰盒测试:介于白盒黑盒之间 静态测试:测试时不执行被测试软件 动态测试:测试时执行被测试软件 单元测试:测试软件的单元模块 集成测试: ...

  7. uwsgi 配置 初试

    /************************************************************************************** * uwsgi 配置 初 ...

  8. 转3xian之所在 (一位ACM大牛的博文)

    3xian的经历和见解...我深思... 最后一天,漫天飘起了雪花,假装欢送我离去. 这次WF之战不太顺利,早期的C题大概花了1秒钟构思,然而由于输出格式多了一个空格直到两个半小时才逃脱Wrong A ...

  9. 洛谷P2384 最短路(dijkstra解法)

    题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你100000000000000000000000000000000000%10金币w ...

  10. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...