ZBLOG

Life of a URLRequest This document gives an overview of the browser's lower-layers for networking. Networking in the browser ranges from high level Javascript APIs like fetch(), all the way down to writing encrypted bytes on a socket. This docum...

这份文档概述了浏览器网络层的底层架构。

浏览器中的网络范围从高级的 Javascript API (如fetch())一直到在套接字上写入加密字节。

本文假定URL请求是通过浏览器的网络服务进行调解的,并专注于网络服务以下所有层的集成关键点。

这尤其是针对新手使用Chrome网络堆栈,但也应该对队伍中可能在某些堆栈部分是专家但在其他组件中大多不熟悉的成员有用。它从步行通过一个基本请求的过程开始,该请求由另一个进程发出,并逐步讨论各个组件的插件方式。

如果您在本文档中注意到任何不准确之处或感觉需要更好地解释某些内容,请不要犹豫提交补丁。

网络堆栈的解剖 网络堆栈位于 //net/ 位置,在 Chrome 存储库中使用名称空间 “net”。当此文档中的类名没有名称空间时,可以普遍认为它在/net/中,并且在网络名称空间中。

顶级网络堆栈对象是 URLRequestContext。上下文具有非所有指向所需对象的指针,以创建和发出URLRequest。上下文必须存活以容纳所有使用它的请求。创建上下文通常由URLRequestContextBuilder处理,这是一个相当复杂的过程。

URLRequestContext的主要用途是使用URLRequestContext :: CreateRequest()创建URLRequest对象。 URLRequest是直接消费网络堆栈的主要接口。它管理加载带有http、https、ws和wss方案的URL。其他方案的URL,如文件、文件系统、blob、chrome和数据,则完全在 //net/之外进行管理。每个URLRequest跟踪单个请求,直到发生错误、取消或收到最终响应为止,具有(可能为空的)正文。

HttpNetworkSession是另一个重要的网络堆栈对象。它拥有HttpStreamFactory、套接字池和HTTP / 2和QUIC会话池的所有权。它还具有与更直接处理套接字的网络堆栈对象的非所有指针。

本文不太提及这些对象,但在HttpStreamFactory上面的层中,对象通常从URLRequestContext获取其依赖项,而HttpStreamFactory及其以下层通常从HttpNetworkSession获取其依赖项。

有多少“

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=259

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?