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地址。
取得IP后进行TCP连接
建立连接三次握手
- 客户端发出连接请求
- 服务端接受请求,返回同意回复
- 客户端接受同意回复,发出正式连接通知
断开连接四次挥手
- 客户端发出断开连接请求
- 服务器接收请求,返回同意回复
- 服务端等待剩余数据发送完毕,返回正式断开回复
- 客户端先后接收两次同意回复,并返回已断开通知
- 断开比连接对一次发送是因为,断开时,可能仍有数据在传输中,故服务端要将收到断开请求,以及正式断开回复分开发送
- TCP连接后,浏览器可与服务器进行数据通信,根据http请求,服务器调度相关资源,如js/html/css,或进行数据库操作(如有),将对应数据返回
- TCP断开连接
浏览器获得资源后进行渲染
- 解析HTML,生成DOM树
- 解析CSS,生成CSS规则树
- 结合DOM树和CSS树,生成redner树
- 根据render树进行绘图,生成页面
- 期间如果有js文件或代码,会停止渲染,先执行js代码(单线程机制)
- script标签中,async属性表示异步下载,下载完成后立即执行js,下载不会阻塞渲染,但执行会,多个asyc,执行顺序与下载顺序无关
- script标签中,defer属性表示延迟执行,遇到先下载,但执行是在HTML解析完成后(DOMContentLoad),执行顺序同下载顺序
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。