1. DNS解析,即找出url对应服务器IP

    • 先从浏览器获取dns缓存
    • 浏览器没有保存,则读系统host文件查看是否有对应关系(代理设置DNS也可直接导向目标IP)
    • host没有,则向本地DNS服务器发出请求,本地DNS服务器查询自身缓存,有则返回
    • 本地DNS服务器没有,则向根DNS服务器(顶级域名服务器)发送请求(13个逻辑节点)
    • 根服务器返回二级域名服务器查询地址,本地DNS服务器收到返回后去二级域名服务器请求URL对应地址
    • 二级域名服务器找到对应的ip地址,返回DNS服务器
    • 一般域名由三段式组成,到二级域名服务器返回的ip已是最终IP
    • 但如果域名不止三段,本地DNS会继续根据二级域名服务器返回的IP继续查找,这个过程就是DNS的递归查找
    • 另外如果URL有别名的存在(通常要到二级域名服务器才会告知别名),则需要根据别名重新递归遍历找到对应IP,除非返回的别名对应的域名解析服务器,与当前所在的域名服务器是同一个地址,既可以直接返回别名对应IP地址。
  2. 取得IP后进行TCP连接

    • 建立连接三次握手

      • 客户端发出连接请求
      • 服务端接受请求,返回同意回复
      • 客户端接受同意回复,发出正式连接通知
    • 断开连接四次挥手

      • 客户端发出断开连接请求
      • 服务器接收请求,返回同意回复
      • 服务端等待剩余数据发送完毕,返回正式断开回复
      • 客户端先后接收两次同意回复,并返回已断开通知
    • 断开比连接对一次发送是因为,断开时,可能仍有数据在传输中,故服务端要将收到断开请求,以及正式断开回复分开发送
  3. TCP连接后,浏览器可与服务器进行数据通信,根据http请求,服务器调度相关资源,如js/html/css,或进行数据库操作(如有),将对应数据返回
  4. TCP断开连接
  5. 浏览器获得资源后进行渲染

    • 解析HTML,生成DOM树
    • 解析CSS,生成CSS规则树
    • 结合DOM树和CSS树,生成redner树
    • 根据render树进行绘图,生成页面
    • 期间如果有js文件或代码,会停止渲染,先执行js代码(单线程机制)
    • script标签中,async属性表示异步下载,下载完成后立即执行js,下载不会阻塞渲染,但执行会,多个asyc,执行顺序与下载顺序无关
    • script标签中,defer属性表示延迟执行,遇到先下载,但执行是在HTML解析完成后(DOMContentLoad),执行顺序同下载顺序

zengrc
28 声望0 粉丝

« 上一篇
async/await原理
下一篇 »
缓存