🍎 输入 URL 回车后发生的事情
相关问题:
- 说说在浏览器中输入 URL 后敲下回车之后,发生的事情?
# 简单分析
输入 URL 到回车后发生的行为:
- URL 解析;
- DNS 查询;
- TCP 连接;
- HTTP 请求;
- 响应请求;
- 页面渲染。
# 完整分析
# URL 解析
首先判断输入的是一个 ** 合法的 URL ** 还是 搜索关键次,根据输入的内容进行对应的操作。
- 根据 URL 找到这个 URL 域名的服务器 IP;为了寻找这个 IP,浏览器首先会寻找缓存,查看缓存中是否有记录,缓存的查找记录顺序为:浏览器缓存、系统缓存、路由器缓存。
# DNS 查询
在缓存中没有查找到则查询 DNS 服务器,最终查找获得服务器的 IP 地址。
# TCP 连接 / 发送 HTTP 请求
浏览器根据这个 IP 地址以及相应的端口号,构造一个 HTTP 请求,这个请求报文会包括这次请求的信息:请求方法、请求说明、请求附带的数据,并将这个 HTTP 请求封装在一个 TCP 包中。
这个 TCP 包会依次经过 传输层、网络层、数据链路层、物理层到达服务器,服务器解析这个请求来做出响应。
# 响应请求
服务器接收到浏览器的请求后,就会进行逻辑操作,处理完成之后返回一个 HTTP 响应消息:包括响应行、响应头、响应正文。
服务器响应之后,由于现在 HTTP 默认开始长连接 Keep-alive
,当前页面关闭之后,TCP 连接会经过四次挥手完成断开。
# 页面渲染
浏览器接收到服务器响应的资源后,首先会对资源进行解析:
- 响应头解析:根据不同的响应头参数做出对应的处理,例如重定向、存储 Cookie、解压 gzip、缓存资源等。
- 查看响应头的
Content-Type
:根据不同的资源类型采用不同的解析方式。
页面渲染的过程:
解析 HTML 文档,构建 DOM 树;
浏览器接收到来自服务器的 HTML 文档之后,会遍历文档节点,生成 DOM 树,解析 CSS 文件 生成 CSS 规则树。
解析 CSS ,生成 CSS 规则树;
合并 DOM 树和 CSS 树,生成 render 树;
布局 render 树(layout /reflow),负责各元素尺寸、位置的计算;
绘制 render 树(paint),绘制页面像素信息;
浏览器将各层的信息发送给 GPU,GPU 将各层合成,显示在屏幕上。
编辑 (opens new window)
📢 上次更新: 2022/09/02, 10:18:16