经典面试题:浏览器从输入URL到页面渲染发生了什么?

39 阅读3分钟

从输入 URL到回车后发生的行为

  • URL解析
  • DNS 查询
  • TCP 连接
  • HTTP 请求
  • 响应请求
  • 页面渲染

URL解析

首先判断你输入的是一个合法的URL 还是一个待搜索的关键词,并且根据你输入的内容进行对应操作。 一个URL通常包括以下内容。

  • 协议(Protocol) :指定了访问资源所使用的协议,如HTTP、HTTPS、FTP等。通常是URL的开头部分,后面跟着一个冒号和两个斜杠。

    例如:http://

  • 主机名(Host) :指定了资源所在的主机名或IP地址。它通常紧跟在协议之后,并以域名或IP地址的形式出现。

    例如:www.example.com

  • 端口(Port) :指定了访问资源所使用的端口号。如果未指定,则使用默认的端口号。端口号通常跟在主机名后面,用冒号分隔。

    例如::80

  • 路径(Path) :指定了资源在服务器上的路径。它通常跟在主机名和端口号之后,以斜杠开头。

    例如:/path

  • 查询参数(Query Parameters) :包含了对资源的附加信息,以键值对的形式出现,多个参数之间用“&”符号分隔。查询参数通常跟在路径之后,并以问号开头。

    例如:?key=value

  • 片段标识(Fragment) :指定了资源中的一个特定片段或锚点。它出现在URL的最后,并以井号开头。

    例如:#section1

DNS 查询

通过DNS把域名翻译成IP地址,具体内容可以看这篇文章:深入了解 DNS 协议:域名解析的核心

TCP 连接

在之前文章:TCP为什么需要三次握手和四次挥手?中,了解到tcp是一种面向有连接的传输层协议

在确定目标服务器服务器的IP地址后,则经历三次握手建立TCP连接, 流程如下:

image.png

HTTP 请求

当建立tcp连接之后,就可以在这基础上进行通信,浏览器发送 http 请求到目标服务器。

请求的内容包括:

  • 请求行
  • 请求头
  • 请求主体

响应请求

当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP响应消息, 包括:

  • 状态行
  • 响应头
  • 响应正文

在服务器响应之后,由于现在http默认开始长连接keep-alive,当页面关闭之后,tcp链接则会经过四次挥手完成断开。

页面渲染

当浏览器接收到服务器响应的资源后,首先会对资源进行解析:

  • 查看响应头的信息,根据不同的指示做对应处理,比如重定向,存储cookie,解压gzip,缓存资源等等
  • 查看响应头的 Content-Type的值,根据不同的资源类型采用不同的解析方式

关于页面的渲染过程如下:

  • 解析HTML,构建 DOM 树
  • 解析 CSS ,生成 CSS 规则树
  • 合并 DOM 树和 CSS 规则,生成 render 树
  • 布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
  • 绘制 render 树( paint ),绘制页面像素信息
  • 浏览器会将各层的信息发送给 GPU,GPU 会将各层合成( composite ),显示在屏幕上