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. [IR] Concept Search and LDA

    重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. From: http://blog.csdn.net/huagong_adu/article/details/7937616/ 传统方法 ...

  2. 使用jQuery判断元素是否在可视区域

    $("#app").offset().top; offset().top表示 绝对偏移值,比如说有一个很长的页面,#app这个元素 在最底下,  $("#app" ...

  3. [板子]Floyd&Dijkstra

    谨以此笔记记录jjw高三党四个月学习NOI的历程..如转载请标记出处 Floyd算法: 默认是业界最短路最简单的写法,并且只有五行.时间复杂度为O(N3),空间复杂度为O(N2). ;k<=n; ...

  4. The Euler function(线性筛欧拉函数)

    /* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...

  5. canvas绘制旋转图形

    将绘制到canvas上的要素进行旋转: 1.绘制时,通过操作画布的坐标轴状态:平移画布原点,旋转坐标轴等,达到旋转图形的目的 2.操作操作DOM元素,直接旋转canvas画布 操作画布的坐标轴状态: ...

  6. PHP读取数据库表显示到前台

    <?php$username=$_GET['uid']; //获取一个值作为查询条件 $result=$db->query("select * from trip where a ...

  7. Struts2知识整理

    准备找工作了.好忐忑!!! 整理整理知识,好好准备. 其实现在Struts2好像不是特别流行,不过还是有用武之地的. struts2简介 struts2是基于mvc开发模型的框架,属于表现层框架 核心 ...

  8. vue 使用axios 跨域请求数据的问题

    axios默认是没有jsonp 跨域请求的方法的.一般来说流行的做法是将跨域放在后台来解决,也就是后台开发人员添加跨域头信息. 例如java中的 header,response.setHeader(& ...

  9. linux操作系统基础篇(五)

    Linux网络以及rpm安装yum源的配置 1.Linux网络 1. 使用ifconfig命令来维护网络1) fconfig命令的功能:显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址.2) ...

  10. python调用c代码

    Linux环境下使用python调用C的printf例子: #!/usr/bin/env python2.7 #-*- coding:utf-8 -*- from ctypes import * de ...