916 字
5 分钟
从用户输入URL到浏览器呈现页面经过了哪些过程
DNS 解析
- 浏览器根据地址去本身缓存中查找 dns 解析记录,如果有,则直接返回 IP 地址,否则浏览器会查找操作系统中(hosts 文件)是否有该域名的 dns 解析记录,如果有则返回。
- 如果浏览器缓存和操作系统 hosts 中均无该域名的 dns 解析记录,或者已经过期,此时就会向域名服务器发起请求来解析这个域名。
- 请求会先到 LDNS(本地域名服务器),让它来尝试解析这个域名,如果 LDNS 也解析不了,则直接到根域名解析器请求解析
- 根域名服务器给 LDNS 返回一个所查询余的主域名服务器(gTLDServer)地址。
- 此时 LDNS 再向上一步返回的 gTLD 服务器发起解析请求。
- gTLD 服务器接收到解析请求后查找并返回此域名对应的 Name Server 域名服务器的地址,这个 Name Server 通常就是你注册的域名服务器(比如阿里 dns、腾讯 dns 等)
- Name Server 域名服务器会查询存储的域名和 IP 的映射关系表,正常情况下都根据域名得到目标 IP 记录,连同一个 TTL 值返回给 DNS Server 域名服务器
- 返回该域名对应的 IP 和 TTL 值,Local DNS Server 会缓存这个域名和 IP 的对应关系,缓存的时间有 TTL 值控制。
- 把解析的结果返回给用户,用户根据 TTL 值缓存在本地系统缓存中,域名解析过程结束。
HTTP 请求发起和响应
-
用户输入 URL,浏览器获取到 URL
-
浏览器(应用层)进行 DNS 解析(如果输入的是 IP 地址,此步骤省略)
-
根据解析出的 IP 地址+端口,浏览器(应用层)发起 HTTP 请求,请求中携带(请求头 header(也可细分为请求行和请求头)、请求体 body),
header 包含: 请求的方法(get、post、put..) 协议(http、https、ftp、sftp…) 目标 url(具体的请求路径已经文件名) 一些必要信息(缓存、cookie 之类) body 包含: 请求的内容
-
请求到达传输层,tcp 协议为传输报文提供可靠的字节流传输服务,它通过三次握手等手段来保证传输过程中的安全可靠。通过对大块数据的分割成一个个报文段的方式提供给大量数据的便携传输。
-
到网络层, 网络层通过 ARP 寻址得到接收方的 Mac 地址,IP 协议把在传输层被分割成一个个数据包传送接收方。
-
数据到达数据链路层,请求阶段完成
-
接收方在数据链路层收到数据包之后,层层传递到应用层,接收方应用程序就获得到请求报文。
-
接收方收到发送方的 HTTP 请求之后,进行请求文件资源(如 HTML 页面)的寻找并响应报文
-
发送方收到响应报文后,如果报文中的状态码表示请求成功,则接受返回的资源(如 HTML 文件),进行页面渲染。
网页渲染
- 浏览器通过 HTMLParser 根据深度遍历的原则把 HTML 解析成 DOM Tree。
- 将 CSS 解析成 CSS Rule Tree(CSSOM Tree)。
- 根据 DOM 树和 CSSOM 树来构造 render Tree。
- layout:根据得到的 render tree 来计算所有节点在屏幕的位置。
- paint:遍历 render 树,并调用硬件图形 API 来绘制每个节点。
- 当遇到
script标签时会等待其中js代码执行完成后继续执行上述步骤(会造成阻塞)
从用户输入URL到浏览器呈现页面经过了哪些过程
https://misty-rain.cn/posts/2026/从用户输入url到浏览器呈现页面经过了哪些过程/ 部分信息可能已经过时









