从输入URL到页面展示的浏览器过程

俗话说的好,温故而知新。我今天翻开了自己的笔记,非常不意外的发现我把之前所学的知识都忘得一干二净。
我认为原因之一是因为当时的我对知识点的理解过于浅显,将别人讲给我的知识看了一通记了一通就以为自己学会了。
第二个原因便是几乎不复习,所以重新翻看之前的知识都无法串联起来。在此立个flag,今后每隔一个月就重新复习一遍知识。

好了废话不多说,进入正题。

来谈谈我对从输入URL到页面展示的浏览器过程的理解。(ps参考了李兵老师的《浏览器工作原理与实践》以及罗剑锋老师的《透视HTTP协议》)

一、首先是用户输入URL,浏览器判断输入的信息是搜索内容还是网址

1、URL:统一资源定位符

格式:<协议类型> : / /  <主机名> :<端口号> / <路径> ? <参数名># <锚点>

scheme  : / / host :port / path ? query # fragment

例如:https://blog.csdn.net/weixin_44797985?spm=1000.2115.3001.5343 

2、用户输入内容之后,判断输入信息是否符合URL规则。

(1)如果是搜索内容,地址栏会使用浏览器默认的搜索引擎,来合成新的带有搜索关键字的URL

(2)如果是符合URL规则的内容,根据URL协议(比如https),把这段内容加上协议,合成完整合法的URL

(3)此时浏览器导航栏显示loading状态,这是因为页面的响应数据还没有获得

二、浏览器进程浏览器构建请求行信息

浏览器进程会通过进程间通信(IPC)将URL请求发送给网络进程,如:GET /index.html HTTP1.1
网络进程收到URL之后,浏览器寻找域名的IP地址,进行DNS解析

1、DNS解析过程

浏览器DNS缓存-->操作系统缓存-->路由器缓存-->DNS缓存-->如果都没有缓存,则运营商的DNS浏览器发起迭代DNS请求,查找域名对应IP

2、另外,如果是https请求,还需要建立TLS连接(关于TLS连接具体可以看另一篇文章)

三、网络进程发起网络请求,也就是通过IP地址发起TCP连接

四、服务器收到报文后处理请求,同时返回响应数据

五、网络进程将获取到的数据包进行解析

根据响应头中的Content-type来判断响应数据的类型,网络进程解析HTTP出来响应头数据,并将其转发给浏览器进程。

1、如果是字节流类型,就将该请求交给下载管理器,该导航流程结束;

2、如果是text/html类型,就通知浏览器进程获取到文档准备渲染。

六、浏览器进程接收到网络进程的响应头数据之后,发送CommitNavigation消息到渲染进程,发送时携带响应头等基本信息

根据当前页面B是否是从页面A打开的并且和页面A是否是同一个站点(根域名和协议一样就被认为是同一个站点),

如果满足上述条件,就复用之前网页的进程,否则,新创建一个单独的渲染进程

七、渲染进程接收到CommitNavigation消息之后,便开始接收HTML数据,接收数据的方式是直接和网络进程建立数据管道

八、最后渲染进程会向浏览器进程“确认提交”

九、最后浏览器进程更新页面状态

1、浏览器收到“确认提交”的消息后,会更新浏览器的页面状态,包括了安全状态、地址栏的 URL、前进后退的历史状态,并更新web页面,此时的web页面是空白页。

2、渲染进程对文档进行页面解析和子资源加载,HTML 通过HTM 解析器转成DOM Tree(二叉树类似结构的东西),CSS按照CSS 规则和CSS解释器转成CSSOM TREE,两个tree结合,形成render tree(不包含HTML的具体元素和元素要画的具体位置),通过Layout可以计算出每个元素具体的宽高颜色位置,结合起来,开始绘制,最后显示在屏幕中新页面显示出来。

至此,一个页面展示过程才基本完成。

通过本次对于这个看似简单的问题的学习,我发现里面串联了许多的知识,关于http协议,TCP连接,TLS连接,渲染过程等等。

如果里面涉及到的知识点有错误,欢迎各位指出~~

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值