HTTP 2 新特性
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 的优势
=========
- HTTP/2 采用二进制格式传递数据,而非HTTP/1.x 的文本格式。
 - HTTP/2 对信息头采用 HPACK 进行压缩传输,可以更好节约信息头占用的网络流量。
 - 多路复用。所有请求都通过一个TCP连接并发完成
 - 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 Table 和 Dynamic 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 新特性的更多相关文章
- SQL Server 2014 新特性——内存数据库
		
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
 - ElasticSearch 5学习(10)——结构化查询(包括新特性)
		
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
 - [干货来袭]C#6.0新特性
		
微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...
 - CSS3新特性应用之结构与布局
		
一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...
 - 【译】Meteor 新手教程:在排行榜上添加新特性
		
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
 - 跨平台的 .NET 运行环境 Mono 3.2 新特性
		
Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...
 - Atitit opencv版本新特性attilax总结
		
Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...
 - es6 新特性2
		
es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...
 - ES6 新特性
		
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...
 - 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》
		
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...
 
随机推荐
- Unix/Linux僵尸进程
			
1. 僵尸进程的产生: 一个进程调用exit命令结束自己生命的时候,其实它并没有真正的被销毁,而是留下一个称为“僵尸进程”的数据结构.这时它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度 ...
 - 【20171025早】alert(1) to win 练习
			
本人黑绝楼,自称老黑,男,25岁,曾经在BAT工作过两年,但是一直都是底层人员,整天做重复性工作,甚敢无趣,曾和工作十年之久的同事聊天,发现对方回首过往,生活是寡淡如水,只有机械性工作.旋即老黑毅然决 ...
 - SEO诊断之关于网站收录(转)
			
如何让网站被搜索引擎收录?我的网站有收录无排名怎么办?这些网站收录问题估计是seo最应关心的根本问题之一,网站收录都没有何来排名?我整理了每天咨询最多最具代表性的 8 个关于网站收录的问题及其答案统一 ...
 - Ionic3 遇到的一些错误- Error: Your isarray platform does not have Api.js
			
执行:ionic cordova resources android --icon -i 生成应用图标时,出现下面的错误: 尝试解决方案: 删掉整个项目,重新创建,竟然好了....
 - TinyXML2的使用
			
-----------------------------------------------------------------2015年7月21日16:37:53----------------- ...
 - Linux中gcc和g++
			
今天在Linux上编写一个小的C++程序运行,需要用到iostream中cout,一开始创建一个hello.c的文件编写如下代码: #include<stdio.h> #include&l ...
 - Webpack 入门教程
			
Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 本章节基于 Webpack3.0 测试通过. 从图中我们可以看出,W ...
 - Scrum Meeting Alpha - 1 (团队任务分解)
			
团队任务分解 Alpha阶段项目目标 实现一个博客园班级博客的Android 客户端: 实现班级博客的常用功能(不包括投票.公告.校区) 有一个较为简洁美观.操作方便的界面 添加消息提醒功能. 任务拆 ...
 - Celery 源码解析四: 定时任务的实现
			
在系列中的第二篇我们已经看过了 Celery 中的执行引擎是如何执行任务的,并且在第三篇中也介绍了任务的对象,但是,目前我们看到的都是被动的任务执行,也就是说目前执行的任务都是第三方调用发送过来的.可 ...
 - .NET读取Excel文件的三种方法的区别
			
ASP.NET读取Excel文件方法一:采用OleDB读取Excel文件: 把Excel文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(strin ...