1. 从浏览器输入 URL 到页面展示的完整过程,DNS、TCP/TLS、HTTP、渲染各阶段的关键细节如何?
请描述从浏览器输入 URL 到页面展示的完整过程,并说明 DNS、TCP/TLS、HTTP、渲染各阶段的关键细节?
- 输入 URL 后的完整请求链路(DNS、TCP、TLS、HTTP 请求、响应、渲染)
- 各阶段的关键细节(缓存、TCP 四次握手、TLS 握手、连接复用)
- 渲染管线与关键渲染路径
整个过程可分为若干阶段:首先浏览器解析输入 URL(判断是合法域名还是搜索词),进行 HTTP 缓存查询(强缓存命中则直接使用本地缓存,不再发起网络请求);然后进行 DNS 解析,依次查询本地 DNS 缓存、系统 hosts 文件、本地 DNS 服务器,最终得到目标 IP,期间可能经过递归查询与多级缓存;随后建立 TCP 连接(若 Keep-Alive 或 HTTP/2 连接池已有连接则复用,否则三次握手),若为 HTTPS 还需进行 TLS 握手(TLS 1.3 为 1-RTT,重连可 0-RTT),协商加密参数并校验证书;接着通过 HTTP 发送请求(若使用 HTTP/2 则在单一连接上多路复用多个流),服务端处理并返回响应(含状态码、响应头、响应体),浏览器判定缓存策略(Cache-Control/ETag)决定是否缓存;最后浏览器进行渲染:解析 HTML 构建 DOM 树、解析 CSS 构建 CSSOM、合并为渲染树、进行布局(Layout)、绘制(Paint)与合成(Composite),在构建过程中同步解析并加载 script/img/link 等资源,JavaScript 会阻塞 DOM 解析(除非 async/defer),CSS 会阻塞渲染。
该题考察对完整网络链路与浏览器工作原理的整体把握。回答重点是"按阶段推进",并突出各阶段的关键细节(缓存、连接复用、TLS 握手、渲染阻塞),体现对性能优化入口(DNS 预解析、HTTP/2、缓存、关键渲染路径)的理解。