Go发起HTTP2.0请求流程分析(前篇)

2023-04-30 来源:飞速影视
前言
继Go中的HTTP请求之——HTTP1.1请求流程分析之后,中间断断续续,历时近一月,终于才敢开始码字写下本文。
阅读建议
HTTP2.0在建立TCP连接和安全的TLS传输通道与HTTP1.1的流程基本一致。所以笔者建议没有看过Go中的HTTP请求之——HTTP1.1请求流程分析这篇文章的先去补一下课,本文会基于前一篇文章仅介绍和HTTP2.0相关的逻辑。
(*Transport).roundTrip
(*Transport).roundTrip方法会调用t.nextProtoOnce.Do(t.onceSetNextProtoDefaults)初始化TLSClientConfig以及h2transport,而这两者都和HTTP2.0有着紧密的联系。
TLSClientConfig: 初始化client支持的http协议, 并在tls握手时告知server。
h2transport: 如果本次请求是http2,那么h2transport会接管连接,请求和响应的处理逻辑。
下面看看源码:

Go发起HTTP2.0请求流程分析(前篇)


笔者将上述的源码简单拆解为以下几个步骤:
新建一个http2clientConnPool并复制给t2,以后http2的请求会优先从该连接池中获取连接。初始化TLSClientConfig,并将支持的h2和http1.1协议添加到TLSClientConfig.NextProtos中。定义一个h2的upgradeFn存储到t1.TLSNextProto里。鉴于前一篇文章对新建连接前的步骤有了较为详细的介绍,所以这里直接看和server建立连接的部分源码,即(*Transport).dialConn方法:

Go发起HTTP2.0请求流程分析(前篇)


相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号