HTTP/2 不是完全的重写http协议,HTTP methods,status codes 和 语义化都是相同的,而且它应该使用和HTTP/1.x 相同的api 表示协议。css
HTTP2 主要就是优化性能,具体而已最终用户感知延迟,网络和服务资源,主要的目标是用户使用一个链接去链接浏览器和服务器html
HTTP2 是基于SPDY,可是HTTP/2 已经演变成社区的参与进入,并在结合中作了一些提升git
Frame 是HTTP/2 二进制格式github
+-----------------------------------------------+ | 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字节为流标识符api
PAYLOAD:包含了原来的 HTTP Header 或者 HTTP Body,经过type 来区分浏览器
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.