# 浏览器 ## 在浏览器中输入URL并按下回车之后会发生什么 > 超高频面试题,从这道面试题开始可以延伸到计算机网络有关的很多问题,如果这道题答的很好,可以把面试官引导到你更熟悉的地方。 ### 一、DNS 解析 1. 浏览器检查缓存(浏览器缓存 → 系统缓存 → 路由器缓存 → ISP DNS) 2. 若缓存无结果,则递归查询 DNS 服务器,最终获取 IP 地址。 📌 输入 `https://www.example.com`,浏览器最终解析为 `93.184.216.34` ``` 用户输入 URL → 查找域名 → 找到服务器 IP 地址 ``` ------ ### 二、建立 TCP 连接(含 TLS/HTTPS) 1. 与目标 IP 发起三次握手(三次握手建立 TCP 连接) 2. 若是 HTTPS,还需进行 TLS 握手,协商加密算法、验证证书 📌 三次握手过程: ``` 客户端 → SYN → 服务器 客户端 ← SYN + ACK ← 服务器 客户端 → ACK → 服务器 ``` ------ ### 三、发送 HTTP 请求 客户端构造并发送 HTTP 请求报文: ``` GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html ``` ------ ### 四、服务器处理请求 服务器收到请求后流程如下: 1. **Nginx / Apache** 等 Web 服务器接收请求 2. 请求转发到应用服务器(如 Java、Python、PHP 等) 3. 应用服务器执行业务逻辑(访问数据库、缓存等) 4. 构造 HTTP 响应并返回 ------ ### 五、返回 HTTP 响应 服务器将 HTML、CSS、JS、图片等资源返回浏览器: ``` HTTP/1.1 200 OK Content-Type: text/html Example Hello World ``` ------ ### 六、浏览器渲染页面 1. **构建 DOM 树**:根据 HTML 结构 2. **构建 CSSOM 树**:加载并解析 CSS 3. **合成 Render Tree**:DOM + CSSOM → 渲染树 4. **布局**:计算各元素位置 5. **绘制 Paint**:绘制每个节点 6. **合成 Compositing**:显示到屏幕上 📌 页面中引用的图片、JS、CSS 资源,浏览器会 **并发发送请求加载** ------ ### 七、页面渲染优化(可拓展回答) - 利用缓存(HTTP 缓存、304) - CDN 加速 - 懒加载(Lazy Load) - JS/CSS 压缩与合并 ------ ### 八、整体流程图 ![image](https://file1.kamacoder.com/i/web/2025-07-31_15-48-53.jpg)