在地址栏输入一个url到页面加载都经历了什么?

参考:https://blog.csdn.net/libin_1/article/details/50778993
https://segmentfault.com/a/1190000010298038

1、用户输入URL地址,通过DNS查询到域名对应的IP地址

用户输入的URL中包含域名,在DNS中一个域名包含一个IP地址,DNS就是要把域名和IP地址一一对应起来。DNS是分布式的,具有层级关系。浏览器现在本地域名服务器中查询DNS表,看能不能找到,找不到的话再向默认的DNS服务器发查询请求(查询的方式有两种:递归查询和迭代查询:递归查询,向其他服务器发请求,让他们替自己去查;迭代查询:告诉本地服务器你下次应该向哪个DNS服务器查询,然后本地服务器自己去查),最终会在一个DNS表中找到该域名对应的IP地址。

2、解析出端口号,与服务器建立TCP连接

URL中包含有端口号。有了目标服务器的ip地址和端口号就能建立TCP连接了。TCP连接通过三次握手建立。
第一步,浏览器给服务发一个SYN包,其中包含一个序列号,假设为j,浏览器进入SYN_SENT状态,等待服务器确认;
第二步,服务器将收到的syn包中的序列号加一,放在一个ACK包里面,同时自己产生一个SYN包,里面包含自己的序列号,假定为k。然后它就会把SYN和ACK包合在一起发送给浏览器,服务器进入SYN_RECV状态;
第三步,浏览器接收到syn和ACK包,将syn包中的序列号k加1,放在一个ACK包里面,发给服务器,双方都进入ESTABLISHED状态。
第三次握手的时候就可以传送数据了。如果服务器没有收到ACK包,它会再给浏览器发送SYN/ACK包。连接建立好之后,服务器就会等待浏览器给它发消息,如果浏览器一直都没有发消息,服务器就会每过75分钟给浏览器发送一个探测报文,如果连着发十次探测报文都没有得到回复,则这个连接就会断掉。
在三次握手的过程中,服务器会维护一个未连接队列,为客户端的每个SYN包开设一个条目,表示已经收到SYN包,并且已经回复确认了,在等待客户端的确认。收到客户端的确认的话,该条目就会从队列中删除。
###3、浏览器给服务器发送HTTP请求
一般情况下浏览器会发送一个GET请求,服务器响应一个页面。
###4、解析HTML,绘制页面
自上而下解析HTML,遇到css链接就会去下载,他可与文档解析同时进行;解析html代码生成dom树,解析css代码生成CSS Object Model,结合DOM和CSS Object Model,生成一个渲染树(render tree)这些步骤并不会很耗时。然后对render tree进行计算,生成布局,最后将布局绘制在屏幕上。如果解析html时遇到了script标签,就会把页面的渲染和DOM解析都阻塞起来,直到它执行完。所以为了不影响页面的显示我们通常会把script标签放在后面。但如果script里面的代码会操纵dom,页面就会从修改dom那步重新渲染。

5、渲染完成后开始页面的onload的事件,然后就结束了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值