作者:白帽子幽灵 时间:2023/6 |
- HTTP2.0介绍
HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。在开放互联网上HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。DANE RFC6698允许域名管理员不通过第三方CA自行发行证书
- 二进制协议
http1.x 是一个文本协议,而 http2.0 是一个彻彻底底的二进制协议,http2.0 的基本单位是帧。
HTTP2.0引入二进制数据帧和流的概念:
客户端发送请求时,请求会被分解为多个帧(Frame),同一个请求的帧的 流标识符(Stream Identifier) 相同。每个请求可以理解为一个包含多个帧的流。
- 多路复用 (Multiplexing) / 连接共享
有了新的分帧机制后,http/2 不再依赖多个TCP连接去实现多流并行:
每个数据流(请求或响应)都拆分成很多互不依赖的帧,因为具有标识字段(Stream id、flags)因此帧可以无序发送(即多个请求分解成帧可以通过一个TCP连接交错发送),最后当帧到达服务端之后,就可以根据 Stream Identifier 来重新组合得到完整的请求。
http 2.0 的TCP连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。此连接可以承载数十或数百个流的复用,多路复用意味着来自很多流的数据包能够混合在一起通过同样连接传输。当到达终点时,再根据不同帧首部的流标识符重新连接将不同的数据流进行组装。
- 头部压缩
客户端和服务器各自维护一张头部信息表,所有头部字段都会存入表中,生成一个索引号,发送过的头部字段此后只发送对应的索引号。相同的头部信息不会通过请求发送,延用之前请求携带的头部信息。新增/修改的头部信息会被加入到HEAD中,两端渐进更新。
- 应用场景
HTTP2是下一代HTTP协议,支持二进制分帧、多路复用、Header压缩、流量控制等 特性,解决了HTTP的诸多问题,可以在一条连接上处理多个请求,提高了传输性能。 启用HTTP2策略后,前端连接为HTTP2协议,后端连接为HTTP协议,如下图所示。 实现在不改造服务器的情况下,让业务支持HTTP2,享受到HTTP2的新特性。
- 参数解释
每连接最大流数量:单个HTTP2连接能包含的最大流数量。
空闲超时时间:最大空闲超时时间,连接处于空闲状态超过这个时间就会发GOAWAY 帧断开连接,
插入HTTP头部:是否允许在向服务器发送的请求钟插入头部字段来反映使用的是 HTTP2。插入HTTP头部 -》头部名称:插入字段的名字
接收窗口大小:初始化一个连接中所有流的窗口大小。
帧大小:一帧的有效载荷的最大尺寸由帧类型不同而不同。 一帧的绝对最大大小为2 -1(16.383)字节。 所有的实现应能接收和处理的最小帧截至最大尺寸
头部表大小:最大动态表大小。
- 协商机制
类似Websocket Client (使用支持http2.0浏览器)向ADC发起访问会在协商SSL时在client hello 中extension ALPN protocol 表明支持的http -version(http1.1/h2)
如果ADC没有开启http2.0则在server hello中extension ALPN protocol 中回应http1.1,后续数据按http1.1通信
如果ADC开启http2.0则在erver hello中extension ALPN protocol 中回应h2,后续数据按http2的机制通信