1.DNS解析
其实在浏览器中输入的域名是不能直接访问对应服务器的(它只是为了方便记忆),而是要通过DNS解析出对应的IP地址才能访问。
DNS解析的具体过程
1)包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件(C:\WINDOWS\system32\drivers\etc),如果里面有这条网址的记录,这返回其中的IP地址完成解析。
2)向本地DNS 服务器进行查询。如果要查询的域名包含在本地配置区域资源中,则返回解析结果,完成域名解析。
3)检查本地DNS服务器缓存中是否有该网址的记录,有则返回解析结果,完成解析。
4)如果上述步骤都没有得到对应IP地址,那么进行一下步骤
a.本地 DNS 服务器发送查询报文至根 DNS 服务器,根 DNS 服务器收到请求后,用顶级域 DNS 服务器地址进行响应给本地DNS服务器。
b.本地 DNS 服务器发送查询报文至顶级域 DNS 服务器。顶级域 DNS 服务器收到请求后,用权威 DNS 服务器地址进行响应给本地DNS服务器。
c.本地 DNS 服务器发送查询报文至权威 DNS 服务器,权威 DNS 服务器收到请求后,用 解析的 IP 地址进行响应,本地DNS服务器再返回给浏览器,完成域名解析。
补充:DNS的两种查询方式:
域名解析包含两种查询方式,分别是递归查询和迭代查询。
一、主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
二、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。
2.TCP连接
浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
3.发送HTTP请求
TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
4.服务器处理请求并返回HTTP报文
服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
5.浏览器解析渲染页面
浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
打开新页面采用的渲染进程策略是:
如果从 A 页面打开 B 页面,且二者都属于同一站点的话,那么 B 页面复用 A 页面的渲染进程;
如果是其他情况,浏览器进程则会为 B 创建一个新的渲染进程。
具体渲染过程
1.HTML 转换为 DOM树
2.CSS 转换为 CSSOM(CSS树)
3.合并DOM和CSSOM,生成Render Tree(渲染树)(这棵树中不包含不可见节点)
4.布局(layout):根据Render Tree浏览器就知道网页中有哪些节点,以及各个节点与 CSS 的关系,从而知道每个节点的位置和几何属性(重排)
6.绘制(Paint):根据计算好的信息绘制整个页面(重绘)