浏览器输入 URL 发生了什么
一、解析域名
在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到对应的服务器,而是要通过 IP 地址。
域名就相当于 IP 地址乔装打扮的伪装者,带着一副面具。它的作用就是便于记忆和沟通的一组服务器的地址。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。
但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。为了解决上述的问题,DNS 服务应运而生。
总而言之,域名解析就是浏览器通过向 DNS 服务器发送域名,DNS 服务器查询到与域名相对应的 IP 地址,然后返回给浏览器,浏览器再将 IP 地址打在协议上,同时请求参数也会在协议搭载,然后一并发送给对应的服务器。
二、三次握手建立 TCP 连接
TCP 三次握手(Three-way Handshake)是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包,主要是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。
在客户端发送数据之前会发起 TCP 三次握手用以同步客户端和服务端的序列号和确认号,并交换 TCP 窗口大小信息。
Chrome 有个机制,同一个域名同时最多只能建立 6 个TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。如果当前请求数量少于 6 个,会直接建立 TCP 连接。
三、发送 HTTP 请求拿到响应结果
TCP 三次握手结束后,开始发送 HTTP 请求报文。
服务器处理请求并返回 HTTP 响应报文。
四、浏览器渲染页面
- 构建 DOM 树
- 构建 CSS 规则树
- 二者结合生成 Render 树
- 再生成布局
- 然后绘制到页面中
五、四次挥手断开 TCP 连接
TCP 关闭一个连接需要经过四次挥手,之所以需要四次挥手,是因为服务端在收到客户端断开连接的 FIN 报文后,并不会立即关闭连接,而是先发送一个 ACK 包先告诉客户端自己已收到关闭连接的请求,等到服务器的所有报文发送完毕后,才发送 FIN 报文断开连接。