引言

简单来说,从地址栏输入url地址到页面最终渲染可以分为七步。

1,输入URL

2,DNS解析

3,TCP连接

4,发送HTTP请求

5,服务器处理请求并返回HTTP报文

6,解析渲染页面

7,连接结束

一、输入URL

URL结构一般是由,协议,域名+端口,路径,参数,片段六部分组成,其中端口可以省略。

一般的网络地址可以为域名或IP地址,使用域名是为了方便记忆,但是为了让计算机理解这个地址还是需要把它解析成为IP地址。

二、DNS解析/查询

客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址,若没有找到就请求上级DNS服务器,直至找到或到根节点。

查找顺序

1,浏览器DNS缓存:首先会向浏览器的缓存中读取上一次访问的记录,在chrome中可以通过地址栏chrome://net-internals/#dns查看缓存的当前状态。

2,计算机DNS缓存:查找存储在系统运行内存中的缓存。

3,路由器DNS缓存:有些路由器也有DNS缓存的功能,访问过的域名会存在路由器上。

4,网络运营商DNS缓存:互联网服务器提供商(如中国电信)也会提供DNS服务,比如计较著名的114.114.114.114(这个使国内移动,电信,联通通用的DNS,解析成功率相对来说更高,国内用户使用的比较多,速度相对快,稳定,使国内用户上网常用的DNS),在本地查找不到的情况下,就会向ISP进行查询。ISP会在当前服务器的缓存内查找是否由记录,如果有则返回这个IP,没有则会向根域名服务器请求查询。

5,递归查询查找a.b.c.d.com

.com->d.com->c.d.com->b.c.d.com->a.b.c.d.com

三、TCP连接

tcp三次握手

第一次握手:建立连接时,客户端发送syn(同步序列编号)包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

四、浏览器向web服务器发送http请求

发送HTTP的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议 80/8080,HTTPS协议443)HTTP请求报文是由三部分组成:请求行,请求报文,请求正文。

五、服务器处理请求并返回HTTP报文

HTTP响应报文也是又三部分组成:状态码,响应报头,响应报文。

六、浏览器解析页面

1,解析HTML,构建DOM树

2,解析CSS,生成CSS规则树

3,合并DOM树和CSS规则树,生成render树

4,布局render树

5,绘制render树(绘制页面像素信息)

6,GPU将各层合成,将结果呈现在浏览器窗口中

七、连接结束,四次挥手

1,第一次挥手:浏览器发送给服务器,告诉服务器请求报文发送完毕。

2,第二次挥手:服务器发送给浏览器,告诉浏览器请求报文接收完毕,可以断开连接。

3,第三次挥手:服务器发送给浏览器,告诉浏览器响应报文发送完毕。

4,第四次挥手:浏览器发送给服务器,告诉服务器响应报文接受完毕,可以断开连接了。

先是服务器断开连接,再是浏览器断开连接。