HTTP 2 新特性

HTTP/2 不是彻底的重写http协议,HTTP methods,status codes 和 语义化都是相同的,并且它应该使用和HTTP/1.x 相同的api 表示协议。

HTTP2 主要就是优化性能,具体而已最终用户感知延迟,网络和服务资源,主要的目标是用户使用一个连接去连接浏览器和服务器

HTTP2 是基于SPDY,但是HTTP/2 已经演变成社区的参与进入,并在结合中做了一些提高

HTTP/2 区别 SPDY 有不同的地方

=========

  • HTTP/2支持明文HTTP传输,而SPDY强制使用HTTPS
  • HTTP/2 信息头的压缩算法采用HPACK,而SPDY采用 DELEFT

HTTP/2 的优势

=========

  1. HTTP/2 采用二进制格式传递数据,而非HTTP/1.x 的文本格式。
  2. HTTP/2 对信息头采用 HPACK 进行压缩传输,可以更好节约信息头占用的网络流量。
  3. 多路复用。所有请求都通过一个TCP连接并发完成
  4. Server Push,服务器可以主动把js和css文件推送给客户端

HTTP/2 的基石 Frame

=========

Frame 是HTTP/2 二进制格式

+-----------------------------------------------+
| Length (24) |
+---------------+---------------+---------------+
| Type (8) | Flags (8) |
+-+-------------+---------------+-------------------+
|R| Stream Identifier (31) |
+=+=================================================+
| Frame Payload (0...) ...
+---------------------------------------------------+

Frame 分成两部分HEADER 和 PAYLOAD

  • HEADER 共 72字节,其中24字节为Length,8字节为Type,8字节为Flags,1字节保留,31字节为流标识符

    • Length: 表达frame payload 的长度,初始化值最大值为$$2^{14}$$ 需要修改配置SETTINGS_MAX_FRAME_SIZE
    • Type: 该帧的类型,类型决定该帧的格式化和语义化。
    • Flags: 对应frame type对应的boolean 标识符
    • R: 保留字段,
    • Steam Identifier: 流标识符,值0x0是保留的,与连接为一个整体,而不是一个单独的流相关的帧
  • PAYLOAD:包含了原来的 HTTP Header 或者 HTTP Body,通过type 来区分

HPACK

=========

HPACKY 主要目的就是把HTTP Header 进行压缩,它使用一个索引表来定义常用的HTTP Header,请求的时候只需要发送表中的索引位置,比如:method=GET 用 2表示,:path=/index.html 用索引值5表示(完整参考Static Table),索引值高位1表示完整索引,

值还会通过 霍夫曼编码进行压缩字符

以常用的 User-Agent 为例,他在金泰表的索引为58,但是它的值不在表中,请以此请求的时候用58,表示这个是User-Agent , 他的值会进行霍夫曼编码(如果编码后的值变得更长了,就不采用霍夫曼编码),服务器收到请求后,会将User-Agent 添加到Dynamic Table 缓存起来,分配一个新的

索引表有Static TableDynamic Table

可以便捷的看到HTTP/2 与 HTTP/1.X 在加载上的区别

https://http2.akamai.com/demo

SETTINGS_MAX_FRAME_SIZE (0x5):

Indicates the size of the largest frame payload that the sender is willing to receive, in octets.

The initial value is 214 (16,384) octets. The value advertised by an endpoint MUST be between this initial value and the maximum allowed frame size (224-1 or 16,777,215 octets), inclusive. Values outside this range MUST be treated as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.

HTTP 2 新特性的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  3. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  4. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  5. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  6. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  7. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  8. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  9. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  10. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

随机推荐

  1. MySQL分区表与合并表

    一.分区表 1. 什么是分区表? 对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成(所以索引也是按照分区的子表定义的, 而没有全局索引).实现分区的代码实际上是对一组底层表的句柄对象的 ...

  2. MFC程序使用GTest搭建测试框架

    一.起源 最近对单元测试比较感兴趣,之后就上网搜了一些测试的框架,C++项目使用的测试框架基本上都使用的GoogleTest,之后就开启了gtest的学习之路. 主要是根据<玩转Google开源 ...

  3. 数据结构--KMP算法总结

    数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...

  4. Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan

    C. Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 me ...

  5. HQL语法

    HQL:Hibernate Query Language HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征. $下面介绍HQL语句的语法 1.from子句 from Person 表明从P ...

  6. HTML5 设备上的API

    一.Vibration API ,接受两种类型参数 vibrate (unsigned long time)   当参数是unsigned long的时候 此时参数表示震动时间.  NotSuppor ...

  7. DOM Exception error 类型

    INDEX_SIZE_ERR  code 1                              索引是负值,或者超过了索引值 DOMSTRING_SIZE_ERR  code 2       ...

  8. 引入servlet概念

    Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中.Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户 ...

  9. 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解

    <javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = { // ...

  10. [转]彻底弄懂css中单位px和em,rem的区别

    难怪会问我 rem 和 em, 这俩或在移动端还是很有必要学习的. root em OK? 国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? P ...