HTTP 2 新特性

HTTP/2作为HTTP1.x的升级版,在保持原有方法、状态码和语义不变的基础上,通过二进制格式传输数据,利用HPACK压缩头部,实现多路复用并支持Server Push,有效减少延迟和资源消耗。

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

xx

可以便捷的看到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.

转载于:https://www.cnblogs.com/yoable/p/7568831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值