本文主要是介绍chromium 协议栈 cronet ios 开启 H3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、全局开关
cronet 原生代码有一个 h3 开启的全局开关,开启后,只需要服务端下发 h3 的域名和版本信息,即可开始与 tcp 竞速开启。
iOS 对应的接口为 setQuicEnabled,通过该接口设置的值最后会复制到 c++ 层的 URLRequestContextConfigBuilder 类的 enable_quic 成员。
2、server 下发 alt-svc header
无论上述开关是否开启,server 都可以下发 alt-svc 头,比如 www.example.com 对应的 alt-svc 为 ‘h3-29=“h3.example.com:443”;ma=2592000’,代表 h3 的版本为 h3-29,支持 h3 的域名为h3.baidu.com,端口为 443,该 header 有效期为 2592000 秒(30天),如果 enable_quic 为 true,该 alt-svc 配置则会保存供对应域名(www.example.com)的后续请求使用,如果为 false,则该配置则被忽略,即无效。
alt-svc 头处理代码位于 net/http_stream_factory.cc 的 HttpStreamFactory::ProcessAlternativeServices 方法。
端上可以按需指定支持的 h3 版本,通过修改 net/quic/quic_context.h 中的 DefaultSupportedQuicVersions 的返回值。(或者再实现一个可定制的接口使用)
3、tcp 和 h3 竞速
如果上述条件满足了,此时会判断是否创建 alt job,alt job 专门用于走其他协议比如 h3(如果启用了 h3)等。
相应代码位于:net/http/http_stream_factory_job_controller.cc 的 HttpStreamFactory::JobController::DoCreateJobs 方法。
这篇关于chromium 协议栈 cronet ios 开启 H3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!