【计算机原理交集】教你回答浏览器打开一个页面的工作过程是怎样的?

前言

这是一个面试经常问到的问题,如果在前些年,你只需要粗略的回答下大致的过程基本就满分了。但是如今这个逐层挤压,资源缩减的大环境下,面试很有可能会对某个节点深入提问。我这里就尽量记录我所知道的,太深入的知识只能抱歉了。

希望看这篇文章之前,能稍微了解一下浏览器的进程,内核:【计算机原理交集】浏览器的多进程与内核以及JS引擎


DNS解析

所需提前了解的概念:URL、hosts、DNS、网络的传输流程。

当我们在地址栏输入URL的时候,UI线程捕捉到,首先会检查本地的hosts文件,查看是否有对应的IP,有就返回给浏览器。

接着看本地DNS缓存,查看是否有对应的IP,有就返回给浏览器。

都没有的话UI线程开启一个网络线程向名称服务器发起 DNS 查询请求。

这个请求在路上经过路由器的时候,会先查询每个路由器的缓存,一路上都没有查到会来到网络服务商(ISP)后查询DNS缓存;

第一次请求之后,这个 IP 地址可能会被缓存在浏览器一段时间。

ISP缓存(了解即可):本身是一种宽带接入提供商给网页批量访问加速的技术。ISP会将当前访问量较大的网页内容放到ISP服务器的缓存中,当有新的用户请求相同内容时,可以直接从缓存中发送相关信息,不必每次都去访问真正的网站,从而加快了不同用户对相同内容的访问速度,同时也能节省网间流量结算成本。----《小鹿动画学编程》

在ISP的DNS还查不到,就会到其他服务器的DNS进行查询,通常会有两种查询方式(了解即可):

  1. 迭代查询:客户端向A-DNS发送查询请求,A在查的同时给回B的地址,客户端再向B发送查询请求,B在查的同时给回C的地址…从A到后面的DNS服务器的等级会越来越大。
  2. 递归查询:客户端向A-DNS发送查询请求,A找不到,就去发送给B,B回复找不到,A再发送给C,C回复找不到…从A到后面的DNS服务器的等级也是会越来越大。

所以大概讲述就是:浏览器先从本地hosts文件看看有没有域名对应ip,没有就在本地DNS缓存中找,还是没有就向名称服务器发送 DNS 查询请求,找到对应ip地址,然后会保留在浏览器里一段时间。

DNS 查询可能存在性能问题,特别是对于移动网络。当一个用户使用了移动网络,每一个 DNS 查询必须从手机发送到基站,然后到达一个认证的 DNS 服务器。手机、信号塔、名称服务器之间的距离可能是一个大的时间等待。—《MDN》

之前有个面试官问我DNS服务器是个真正的服务器吗?


TCP连接

找到ip地址(每个地区的IP其实是不一样的,但都是正确的)后,就可以找到对应的请求服务器了。网络线程拿到的这个ip会通过Chrome的SafeBrowsing站点安全系统,检查站点是否有问题(例如看看这个ip在不在谷歌的黑名单内,在的话问你是否要访问)。

然后浏览器和服务器之间会先建立三次握手机制,这个机制的是用来让两端尝试进行通信:三次握手


TLS 协商

通过三次握手机制机制确认双方都能够相互通信后,要开始进行安全检验了。大概过程应该是这样的:

  • 浏览器:在吗
  • 服务器:在,这是我的证书
  • 浏览器:这是我们的秘钥
  • 服务器:ok
  • 浏览器:ok

HTTP请求

做完以上动作后,彼此就真正的建立联系了,可以通过HTTP进行相互之间的信息传递,并且可以通过状态码来判断双方信息传递的情况。

但在获取index.html文件的时候,会进行一个【TCP 慢启动 / 14KB 规则】的过程,这玩意我觉得可以暂时不去理解。

关于HTTP的具体内容,可以看我这篇文章【网络基础】通俗易懂的了解HTTPS的整体过程(小白向)


解析HTML文件

直接看【计算机原理交集】一起探讨和梳理下,浏览器怎么解析HTML文件的

这里单独写一篇新的文章是因为内容比较多,都放这里不利于以后这篇文章的拓展。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值