一共有以下几步:
- DNS解析
- 发起TCP连接
- 发起HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
一、DNS解析
DNS解析是在DNS服务器上查询你所输入的域名对应的IP地址(因为IP地址才是访问网页的唯一标识)。
查询顺序:浏览器缓存——本地DNS服务器——根域名服务器——顶级域名服务器——权威域名服务器。
DNS解析是一个递归的过程,浏览器只需要发起一次请求,接下来由域名服务器代为发送下一级请求。
(1)在区域传输时DNS使用TCP协议
辅域名服务器会定时(一般3小时)向主域名服务器查询数据是否有变动,如果有变动,会进行一次区域传输,因为数据量较大,所以会使用TCP协议。
(2)在域名解析时DNS使用UDP协议
因为返回的域名一般不超过512字节,UDP协议响应更快,用UDP即可。
二、发起TCP连接
三次握手:
- 客户端向服务器发送SYN包(seq=x),并进入SYN_SEND状态
- 服务器接收到客户端发来的SYN包,会返回一个ACK包(ack=x+1),同时自己也发送一个SYN包(seq=y),然后服务器进入SYN_RECV状态
- 客户端接收到服务器的SYN+ACK包,然后返回一个ACK包(ack=y+1),发送完后,客户端和服务器进入ESTIBLISHED状态,完成三次握手
三、发送HTTP请求
客户端构建HTTP请求报文发送至服务器:请求行、请求报头和请求正文
四、服务器处理请求并返回HTTP报文
服务器对HTTP请求进行解析,一般有Web服务器进行处理。如TomCat、Nginx、Apache。
响应报文:响应行(状态码)、响应报头和响应报文。
五、浏览器解析渲染页面
- 解析HTML形成DOM树
- 解析CSS形成CSSOM树
- 合并DOM和CSSOM树形成渲染树
- 浏览器开始渲染网页(重绘、回流)