基于 TLS
协议运行的 HTTP/2
被称为 h2
,直接在 TCP
协议之上运行的 HTTP/2
被称为 h2c
,这篇文件通过抓包分析 h2
是如何被建立的来介绍一下 h2
。
1.TLS 通讯过程
1.1 TLS 通讯步骤
1.2 TLS 流程示意图
Tips:关于
TLS
协议会在后续文章详细介绍,这里只是简单说明一下。
2.抓包分析
这里以新浪首页 sina.com.cn
为例,抓取到的报文步骤如下:
步骤1:Client Hello
Tips:
Client Hello
报文中的ALPN
表示客户端告诉服务端支持哪些协议,如图中有h2(基于TLS的HTTP/2)
和HTTP/1.1
。
步骤2:Server Hello, Change Cipher Spec, Encrypted Extensions, Finished
Tips:
Server Hello
报文中的ALPN
表示服务端告诉客户端支持哪些协议,如图中有h2(基于TLS的HTTP/2)
。
步骤3:Change Cipher Spec, Finished
步骤4:客户端发送 Magic
帧
Tips:这是一个固定值,
Magic
帧的值PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n
,十六进制ASCII
表示为0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a
,它发送完毕之后紧跟SETTING
帧。
步骤5:客户端发送 SETTING
帧
Tips:
SETTING
帧可以是空的。
步骤6:服务端确认 SETTING
帧
步骤7:服务端发送 SETTING
帧
步骤8:客户端确认 SETTING
帧
Tips:完成以上步骤即可建立
HTTP/2
的链接