HTTP/2是不是必须基于TLS/SSL协议
- IETF标准不要求必须基于TLS/SSL协议
- 浏览器要求必须基于TLS/SSL协议
- 在TLS层ALPN(Application Layer Protocol Negotiation)扩展做协商,只认HTTP/1.x的代理服务器不会干扰HTTP/2
- shema:http://和https//默认基于80和443端口
- h2:基于TLS协议运行的HTTP/2被称为h2
- h2c:直接在TCP协议之上运行的HTTP/2被称为h2c。
基于TLS HTTP2升级
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 的链接