前端面试题:输入一个URL后

103 阅读6分钟

敲下URL后,浏览器从解析URL、DNS查询、检查缓存、通过CDN获取资源、建立连接发送请求,到最终渲染页面,经历了多个步骤。浏览器通过构建DOM和CSSOM书、执行JavaScript、进行布局和绘制,最终讲页面显示给用户。同时,缓存和CDN的使用大大提高了资源加载速度,优化了用户体验

具体步骤如下

1. URL分解和DNS解析

URL分解:首先将URL分解为协议、域名、端口、路径和查询参数

DNS解析:浏览器通过DNS解析讲域名转换为IP地址。这个过程可能涉及缓存查询和递归迭代DNS查询,最终获得目标的IP地址

DNS的递归查询和迭代查询

在递归查询中用户的本地DNS会负责从根服务器开始逐级查询,直到获得最终的IP地址,并将结果返回给用户。

在迭代查询中本地DNS会从根服务器开始查询,但每一级DNS服务器只返回下一步查询的地址,不直接返回最终结果,递归解析服务器会逐级请求,直到获得IP地址为止,但它只是把结果传递给下一级

DNS渲染过程

  • 浏览器查询缓存和操作系统,找不到时请求本地DNS服务器。
  • 本地DNS服务器向根DNS服务器查询。
  • 根DNS服务器指向.com的TLD DNS服务器。
  • TLD DNS服务器指向 example.com 的权威DNS服务器。
  • 权威DNS服务器返回 www.example.com 对应的IP地址。
  • 本地DNS服务器将IP地址返回给浏览器,浏览器进行连接。

2.检查浏览器缓存

在DNS解析完成后,浏览器会检查本地缓存,避免重复请求资源

强缓存:检查是否有缓存资源未过期,如果有,直接使用缓存资源,不会像服务器发送请求。这通过Cache-ControlExpires 响应头来控制返回Status Code: 200

协商缓存:如果资源过期或未命中强缓存,浏览器会发送请求到服务器,并附带If-Modified-SinceEtag 服务器检查资源是否更新,如果没有更新,返回304状态码,浏览器继续使用缓存的资源。

3.使用CDN(内容分发网络)

如果缓存资源未命中或不可用,且资源由CDN托管,浏览器可能会从CDN获取资源。CDN是分布式的网络节点,靠近用户的地理位置,从而减少延迟和提高资源加载速度

CDN的作用:CDN缓存常用的静态资源,加速资源传递。浏览器会向CDN最近的节点发起请求,而不是直接请求源服务器。

4.建立TCP链接和SSL/TLS握手

浏览器与服务器之间会通过三次握手建立TCP链接,如果使用的是HTTPS还需要进行SSL/TLS握手来加密通讯,确保数据传输的安全性。

浏览器与目标服务器建立TCP链接包含以下步骤:

  1. 三次握手:

    1. SYN:客户端发送SYN包,表示希望建立连接
    2. SYN-ACK:服务器接收到SYN包后,响应一个SYN-ACK包,确认链接请求
    3. ACK:客户端收到SYN-ACK包,发送一个ACK包,确认链接建立
  2. SSL/TLS握手:如果使用的是HTTPS,在建立TCP链接后,还需要进行SSL/TLS握手,以协商加密算法、验证证书并生成对称加密密钥,用于加密后续的通讯

为什么需要三次握手?

  1. 确保双方的发送和接收能力正常
  2. 防止重复的连接建立
  3. 同步双方的初始序列号

5.发送HTTP/HTTPS请求

一旦链接建立,浏览器会构建并发送http请求,包括请求方法、路径、头部信息等,来请求服务器上的资源

具体步骤如下:

  1. 构建请求:浏览器构建一个HTTP请求,包含请求方法、请求路径、请求投、Cookie、查询参数等
  2. 发送请求:浏览器将构建好的HTTP请求发送给服务器,请求目标资源

6.服务器处理请求并返回响应

服务器接受到请求好,处理并生成HTTP响应。包含状态码、响应头和响应体(html, js资源等)服务器也可以利用缓存控制头来指示浏览器如何缓存资源。

7.浏览器接受响应并渲染页面

浏览器接受到服务器的响应后,会解析HTML,构建DOM树;解析CSS,构建CSSOM树。然后将两者合并生成渲染树,计算元素布局,最后将页面绘制到屏幕上。JS的执行可能会阻塞这些过程,影响页面的渲染速度。

具体步骤:

  1. 解析HTML:浏览器解析HTML文档,根据DOM生成渲染树

  2. 加载资源:浏览器解析HTML过程中,遇到外部资源(CSS, JS等)会发起相应的请求加在这些资源。在遇到<script> 标签会阻塞DOM树的构建,浏览器必须先下载并实行JS代码,才能继续解析HTML

  3. CSSOM树构建:浏览器解析CSS文件,生成CSS对象模型树,用于页面的样式渲染。CSS文件的下载不会阻塞HTML解析,但会阻塞渲染树的构建,因为渲染树依赖于CSS样式。

  4. 执行JavaScript:浏览器解析并执行JavaScript代码,可能会修改DOM结构或触发页面重绘,这些操作会影响页面的渲染性能。

  5. 渲染树构建:

    1. 渲染树:浏览器将DOM树和CSSOM树合并,生成渲染树。渲染树包含了页面中可见元素的样式和位置等信息。
    2. 布局计算:浏览器基于渲染树计算每个元素的位置和大小,这一步称为布局。
  6. 重绘:浏览器根据渲染树和布局结果,将页面内容绘制到屏幕上

8.关闭链接

在页面加在完成后,浏览器和服务器之间的链接会根据Http协议的规定关闭:

  1. 短链接(http1.0, http1.1):请求完成后,链接会立即关闭
  2. 长链接(http1.1的keep-alive, http2)::链接保持打开状态,以便复用,处理后续的请求,减少建立链接的开销