从输入url到页面展示出来都发生了什么--浏览器加载页面过程

1.DNS解析

域名解析,如www.baidu.com我们知道这是百度首页的网址,但是电脑是不认识他的,电脑只能根据IP地址去访问百度的服务器,所以第一步要做的就是把域名解析成IP地址

浏览器首先会查找浏览器自身的缓存,若有则直接访问,若没有则查看系统的缓存,有则访问,没有就去路由器查。。。就这样直到查到顶级ISP一定会找到。

2.三次“握手”建立TCP连接

 

client和sever都要确认对方能收能发才会建立连接

当clien收到  SYN+ACK 的时候,他就可以确认server能发送信息,由SYN+ACK确认码可以知道server刚刚收到了第一条数据,就此client可以确定server端能收能发

当server收到 第一条数据 SYN时,可以确认client具有发送数据能力,当server收到ACK时,可以确定刚刚client收到了自己发送的数据,就此server可以确定client端能收能发

打个比方就是:

client: 老王你吃了吗?

server:我吃过了,你呢?

client: 我也吃过了

双方都能确定对方吃饭了,这样就建立起一条TCP连接

3.发送http请求

建立连接之后就可以发送请求了,这里的请求就是我们要访问的网站

4.服务器处理请求

服务器收到请求后,就会根据后端代码处理请求,那就看具体业务了

5.返回响应结果

无论服务器怎么处理请求最后都会返回响应结果,如果我们访问www.baidu.com服务器就会返回一个html页面

几个常见的响应码

2xx成功
3xx重定向
4xx请求错误
5xx服务器错误

6.关闭连接(现在浏览器都是默认keep-alive,是长连接,会在关闭tab时才关闭连接)

当没有数据需要传递时,为了节约网络资源,任意一方都可以发起关闭请求

client和server都要发送关闭请求并要收到对方的确认

打个比方:

client: 我要关闭连接

server: 知道了

server: 我也要关闭连接

client: 知道了

双方都确认后就关闭了TCP连接

7.解析html、渲染页面

当浏览器拿到服务器返回的html文件时,就会对他进行逐行解析最后渲染

  • 解析html生成DOM树
  • 解析css生成CSSOM规则书
  • 讲DOM树与CSSOM规则树合并在一起生成render tree
  • 遍历render tree 开始布局, 计算每个节点的大小位置等信息
  • 将render tree的每个节点绘制到屏幕上

这就是解析渲染的过程,但是html的解析和渲染并不是一帆风顺的

  • css加载会阻塞js执行
  • js的加载会阻塞所有动作,html解析DOM构建等,直到js加载并执行完成

但是html给script标签提供里两个属性 defer 和 async可以让js异步加载,也就是加载js时不会阻塞,只有执行js时才会阻塞,但是他们俩还是有区别的

defer: 异步加载脚本,也就是加载时不会阻塞,js脚本会按照出现在html中的顺序在所有元素解析完成后才执行

async: 异步加载脚本,也即是加载时不会阻塞,js脚本会在加载完成后立即执行,并且无序,完全不考虑脚本之间的依赖

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值