Go发起HTTP2.0请求流程分析(前篇)(10)
2023-04-30 来源:飞速影视
因为笔者的请求header中没有携带100-continue标头,所以在前面的getBodyWriterState函数中初始化的s.timer为nil即调用scheduleBodyWrite会立即开始发送请求body。
7、轮询管道获取响应结果。
在看轮询源码之前,先看一个简单的函数:
该函数主要就是判断读到的响应是否正常,并根据响应的结果构造(*http2ClientConn).roundTrip的返回值。
了解了handleReadLoopResponse之后,下面就看看轮询的逻辑:
笔者仅对上面的第二种情况即请求body发送完成进行描述:
能否读到响应,如果能够读取响应则直接返回。判断请求body是否发送成功,如果发送失败,直接返回。如果请求body发送成功,则设置响应header的超时时间。总结
本文主要描述了两个方面的内容:
确认client和server都支持http2协议,并构建一个http2的连接,同时开启该连接的读循环。通过http2连接池获取一个http2连接,并发送请求和读取响应。预告
鉴于HTTTP2.0的内容较多,且文章篇幅过长时不易阅读,笔者将后续要分析的内容拆为两个部分:
描述数据帧和流控制以及读循环读到响应并发送给readLoopResCh管道。http2.0标头压缩逻辑。最后,衷心希望本文能够对各位读者有一定的帮助。
注:写本文时, 笔者所用go版本为: go1.14.2。本文对h2c的情况不予以考虑。因为笔者分析的是请求流程,所以没有在本地搭建server,而是使用了一个支持http2连接的图片一步步的debug。eg:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/
[email protected]参考
https://developers.google.com/web/fundamentals/performance/http2?hl=zh-cn
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号