注册
web

我们在搜索一个问题的时候浏览器究竟做了什么

1+1=?,这个问题一直困扰着我,这天摸鱼的时间,我打开浏览器,在地址栏中输入http://www.baidu.com,按下回车,从这时起,我的疑虑从1+1=?变成了打开百度时浏览器到底做了什么工作?



这算是一个面试常见题,反正我被提问了无数次 TuT

为什么面试官总喜欢提问这个问题?一般面试官问这个问题,是为了考察前端的广度和深度。



在浏览器地址栏键入URL地址


当我们在浏览器地址栏输入一个URL地址后,浏览器会开一个线程来对我们输入的URL进行解析处理。


1. DNS域名解析


我们在浏览器中输入的URL通常是一个域名,浏览器并不认识域名,它只知道IP,而我们平时记住的一般是域名,所以需要一个解析过程,让浏览器认得我们输入的内容。



  • IP地址:IP地址是某一台主机在互联网上的地址
  • 域名:和IP差不多意思,也是主机在互联网上的地址,人们一般记住的是域名,更有实质性意义。如果把IP比作经纬度,那么域名就是街道地址。
  • DNS:Domain Name System,负责提供域名和IP对应的查询服务,即域名解析系统;
  • URL:Uniform Resource Locator,统一资源定位符,其实就是我们说的‘网址’。

由此可以推断出,当我们敲下一行url地址时,浏览器首先做的是,先到DNS问问这个url的实际位置在哪里?


2. 发起请求



  • 协议:把数据打包成一种传输双方都看得懂的形式。
  • http:Hyper Text Transfer Protocol,超文本传输协议,通常运行在TCP之上。超文本就是用文本的方式来传输超越文本的内容,例如图片、音频等等。
  • TCP:Transmission Control Protocol,传输控制协议,是传输层的协议,用于保持通信的完整性。
  • 服务器:其实就是一台主机(电脑),目标资源可以存放在它的存储空间中。

拿到ip地址后,浏览器向目标地址发起http或者https协议的网络请求。

HTTP请求的本质是TCP/IP的请求构建。建立连接时需要进行3次握手进行验证,断开连接时需要4次挥手进行验证,保证传输的可靠性。


握手挥手过程有点复杂,具体的另出一篇文章说明!


3次握手


三次握手1.gif



  • 第一次握手:客户端发送网络包,服务端收到。

    服务端得出结论:客户端的发送能力、服务端的接收能力正常
  • 第二次握手:服务端发包,客户端收到。

    客户端得出结论:服务端的接收、发送能力正常,客户端的接收、发送能力正常。但是服务器并不能确认客户端接收能力是否正常。
  • 第三次握手:客户端发包,服务端收到。

    服务端得出结论:客户端的接收、发送能力正常,服务器的发送、接收能力正常。

三次握手.gif


4次挥手



  • 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号,此时客户端处于FIN_WAIT1状态。

    即发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1状态,等待服务端的确认。
  • 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,并把客户端的序列号值 +1 作为 ACK 的报文序号列值,表明已经收到客户端的报文,此时服务端处于 CLOSE_WAIT 状态。
  • 第三次挥手:服务器端关闭与客户端的连接,发送一个 FIN Seq=N 给客户端。
  • 第四次挥手:客户端返回 ACK 报文确认,确认序号 ACK 未收到的序号 N+1

四次挥手.gif


3. 服务器响应


服务器上运行的WEB服务软件根据http协议的规则,返回URL中指定的资源。

HTTP请求到达服务器,服务器进行对应的处理,最后要把数据传给浏览器,即返回网络响应。

和请求部分类似,网络响应具有三个部分:响应行、响应头和响应体,发起请求后,服务器会返回一个状态码,以示下一步的操作。


响应完成后TCP连接会断开吗


首先需要判断一下Connection字段,如果请求头或响应头中包含Connection: Keep-Alive,表示建立了持久连接,这样TCP会一直保持,之后请求统一站点的资源会复用这个连接;否则会断开TCP连接,响应流程结束。


状态码


状态码由3位数组成,第一个数字定义了响应的类别:



  1. 1xx:表示请求已接收,继续处理;
  2. 2xx:表示请求已被成功接收;
  3. 3xx:要想完成请求必须进行更进一步的操作;
  4. 4xx:客户端有误,请求有语法错误或请求无法实现;
  5. 5xx:服务器端错误,服务器未能实现合法的请求。

服务器返回相应文件


请求成功后,服务器会返回相应的网页,浏览器接收到响应成功的报文后会开始下载网页,至此,通信结束。


浏览器解析渲染页面


浏览器在接收到HTML/css/js文件之后是怎么将页面渲染在浏览器上的?

浏览器在拿到服务器返回的网页之后,首先会根据顶部定义的 DTD 类型进行对应的解析,解析过程将被交给内部的 GUI 渲染线程来处理。




  • 浏览器:浏览器是一个本地应用程序,它根据一定的标准引导页面加载和渲染页面
  • css:Cascading Style Sheets,层叠样式表,用于html中各元素样式显示
  • JS:JavaScript,在web应用中控制用户和网页应用的交互逻辑


参考文章



  1. 超详细讲解页面加载过程
  2. 网页加载过程简述

作者:在因斯坦
来源:juejin.cn/post/7174744415221579832

0 个评论

要回复文章请先登录注册