前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浏览器从输入网址到看到网页的流程

浏览器从输入网址到看到网页的流程

作者头像
henu_Newxc03
发布2022-05-05 18:18:33
1.1K0
发布2022-05-05 18:18:33
举报
文章被收录于专栏:Newxc03的前端之路

一、解析URL

⾸先会对 URL 进⾏解析,分析所需要使⽤的传输协议请求的资源的路径。如果输⼊的URL 中的协议或者主机名不合法,将会把地址栏中输⼊的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了⾮法字符,如果存在⾮法字符,则对⾮法字符进⾏转义后再进⾏下⼀过程。

二、缓存判断

浏览器会判断所请求的资源是否在缓存⾥,如果请求的资源在缓存⾥并且没有失效,那么就直接使⽤,否则向服务器发起新的请求。

三、DNS解析

下⼀步⾸先需要获取的是输⼊的 URL 中的域名的 IP 地址,⾸先会判断本地是否有该域名的 IP 地址的缓存,如果有则使⽤,如果没有则向本地 DNS 服务器发起请求。本地 DNS 服务器也会先检查是否存在缓存,如果没有就会先向根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的⽤户。⽤户向本地 DNS 服务器发起请求属于递归请求,本地 DNS 服务器向各级域名服务器发起请求属于迭代请求

四、获取MAC地址

当浏览器得到 IP 地址后,数据传输还需要知道⽬的主机 MAC 地址,因为应⽤层下发数据给传输层,TCP 协议会指定源端⼝号⽬的端⼝号,然后下发给⽹络层。⽹络层会将本机地址作为源地址,获取的 IP 地址作为⽬的地址。然后将下发给数据链路层,数据链路层的发送需要加⼊通信双⽅ 的 MAC 地址,本机的 MAC 地址作为源 MAC 地址,⽬的 MAC 地址需要分情况处理。通过将 IP 地址本机的⼦⽹掩码 相与,可以判断是否与请求主机在同⼀个⼦⽹⾥,如果在同⼀个⼦⽹⾥,可以使⽤ APR 协议获取到⽬的主机的 MAC 地址,如果不在⼀个⼦⽹⾥,那么请求应该转发给⽹关,由它代为转发,此时同样可以通过 ARP 协议来获取⽹关的 MAC 地址,此时⽬的主机的 MAC 地址应该为⽹关的地址。

五、TCP三次握手

下⾯是 TCP 建⽴连接的三次握⼿的过程,⾸先客户端向服务器发送⼀个 SYN 连接请求报⽂段和⼀个随机序号,服务端接收到请求后向服务器端发送⼀个 SYN ACK报⽂段,确认连接请求,并且也向客户端发送⼀个随机序号。客户端接收服务器的确认应答后,进⼊连接建⽴的状态,同时向服务器也发送⼀个ACK 确认报⽂段,服务器端接收到确认后,也进⼊连接建⽴状态,此时双⽅的连接就建⽴起来了。

六、HTTPS握手

如果使⽤的是 HTTPS 协议,在通信前还存在 TLS 的⼀个四次握⼿的过程。⾸先由客户端向服务器端发送使⽤的协议的版本号、⼀个随机数和可以使⽤的加密⽅法。服务器端收到后,确认加密的⽅法,也向客户端发送⼀个随机数和⾃⼰的数字证书。客户端收到后,⾸先检查数字证书是否有效,如果有效,则再⽣成⼀个随机数,并使⽤证书中的公钥对随机数加密,然后发送给服务器端,并且还会提供⼀个前⾯所有内容的 hash 值供服务器端检验。服务器端接收后,使⽤⾃⼰的私钥对数据解密,同时向客户端发送⼀个前⾯所有内容的 hash 值供客户端检验。这个时候双⽅都有了三个随机数,按照之前所约定的加密⽅法,使⽤这三个随机数⽣成⼀把秘钥,以后双⽅通信前,就使⽤这个秘钥对数据进⾏加密后再传输。

七、返回数据

当⻚⾯请求发送到服务器端后,服务器端会返回⼀个 html ⽂件作为响应,浏览器接收到响应后,开始对 html ⽂件进⾏解析,开始⻚⾯的渲染过程。

八、页面渲染

浏览器⾸先会根据 html ⽂件构建 DOM 树,根据解析到的 css ⽂件构建 CSSOM 树,如果遇到 script 标签,则判断是否含有 defer 或者 async 属性,要不然 script 的加载和执⾏会造成⻚⾯的渲染的阻塞。当 DOM 树和 CSSOM 树建⽴好后,根据它们来构建渲染树。渲染树构建好后,会根据渲染树来进⾏布局。布局完成后,最后使⽤浏览器的 UI 接⼝对⻚⾯进⾏绘制。这个时候整个⻚⾯就显示出来了。

九、TCP四次挥手

最后⼀步是 TCP 断开连接的四次挥⼿过程。若客户端认为数据发送完成,则它需要向服务端发送连接释放请求。服务端收到连接释放请求后,会告诉应⽤层要释放 TCP 链接。然后会发送ACK 包,并进⼊ CLOSE_WAIT 状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端。服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进⼊ LAST-ACK 状态。客户端收到释放请求后,向服务端发送确认应答,此时客户端进⼊ TIME-WAIT 状态。该状态会持续 2MSL(最⼤段⽣存期,指报⽂段在⽹络中⽣存的时间,超时会被抛弃) 时间,若该时间段内没有服务端的重发请求的话,就进⼊ CLOSED 状态。当服务端收到确认应答后,也便进⼊ CLOSED 状态.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、解析URL
  • 二、缓存判断
  • 三、DNS解析
  • 四、获取MAC地址
  • 五、TCP三次握手
  • 六、HTTPS握手
  • 七、返回数据
  • 八、页面渲染
  • 九、TCP四次挥手
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档