我们在搜索一个问题的时候浏览器究竟做了什么
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次握手
- 第一次握手:客户端发送网络包,服务端收到。
服务端得出结论:客户端的发送能力、服务端的接收能力正常 - 第二次握手:服务端发包,客户端收到。
客户端得出结论:服务端的接收、发送能力正常,客户端的接收、发送能力正常。但是服务器并不能确认客户端接收能力是否正常。 - 第三次握手:客户端发包,服务端收到。
服务端得出结论:客户端的接收、发送能力正常,服务器的发送、接收能力正常。
4次挥手
- 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号,此时客户端处于
FIN_WAIT1
状态。
即发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1
状态,等待服务端的确认。 - 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,并把客户端的序列号值 +1 作为 ACK 的报文序号列值,表明已经收到客户端的报文,此时服务端处于 CLOSE_WAIT 状态。
- 第三次挥手:服务器端关闭与客户端的连接,发送一个 FIN Seq=N 给客户端。
- 第四次挥手:客户端返回 ACK 报文确认,确认序号 ACK 未收到的序号 N+1
3. 服务器响应
服务器上运行的WEB服务软件根据http协议的规则,返回URL中指定的资源。
HTTP请求到达服务器,服务器进行对应的处理,最后要把数据传给浏览器,即返回网络响应。
和请求部分类似,网络响应具有三个部分:响应行、响应头和响应体,发起请求后,服务器会返回一个状态码,以示下一步的操作。
响应完成后TCP连接会断开吗
首先需要判断一下Connection
字段,如果请求头或响应头中包含Connection: Keep-Alive
,表示建立了持久连接,这样TCP会一直保持,之后请求统一站点的资源会复用这个连接;否则会断开TCP连接,响应流程结束。
状态码
状态码由3位数组成,第一个数字定义了响应的类别:
- 1xx:表示请求已接收,继续处理;
- 2xx:表示请求已被成功接收;
- 3xx:要想完成请求必须进行更进一步的操作;
- 4xx:客户端有误,请求有语法错误或请求无法实现;
- 5xx:服务器端错误,服务器未能实现合法的请求。
服务器返回相应文件
请求成功后,服务器会返回相应的网页,浏览器接收到响应成功的报文后会开始下载网页,至此,通信结束。
浏览器解析渲染页面
浏览器在接收到HTML/css/js文件之后是怎么将页面渲染在浏览器上的?
浏览器在拿到服务器返回的网页之后,首先会根据顶部定义的 DTD 类型进行对应的解析,解析过程将被交给内部的 GUI 渲染线程来处理。
- 浏览器:浏览器是一个本地应用程序,它根据一定的标准引导页面加载和渲染页面
- css:Cascading Style Sheets,层叠样式表,用于html中各元素样式显示
- JS:JavaScript,在web应用中控制用户和网页应用的交互逻辑
参考文章
来源:juejin.cn/post/7174744415221579832