返回

从 URL 起航,网页的渲染之旅

前端

从在地址栏输入域名地址开始,到被展示在屏幕上,中间是怎样一个过程?本文将对该过程进行探讨,带领你了解网页渲染的整个流程。

DNS解析

当你在浏览器地址栏中输入一个域名时,浏览器首先需要进行DNS解析,将域名转换为对应的IP地址。DNS解析过程如下:

  1. 浏览器首先会检查本地是否有该域名的缓存记录,如果有则直接使用缓存的IP地址。
  2. 如果本地没有缓存,浏览器会向DNS服务器发送请求,查询该域名的IP地址。
  3. DNS服务器收到请求后,会查询自己的记录,如果记录中存在该域名的IP地址,则直接返回。
  4. 如果DNS服务器中没有该域名的IP地址,则会向上一级DNS服务器查询,以此类推,直到找到该域名的IP地址。

TCP三次握手

在获得域名对应的IP地址后,浏览器需要与服务器建立TCP连接。TCP连接的建立过程如下:

  1. 浏览器向服务器发送一个SYN(Synchronize)包,其中包含了一个随机生成的序列号。
  2. 服务器收到SYN包后,发送一个SYN-ACK(Synchronize-Acknowledge)包,其中包含了自己的随机生成的序列号和对浏览器序列号的确认号。
  3. 浏览器收到SYN-ACK包后,发送一个ACK(Acknowledge)包,其中包含了对服务器序列号的确认号。

TCP三次握手完成后,浏览器和服务器之间就建立起了TCP连接。

HTTP请求

TCP连接建立后,浏览器就可以向服务器发送HTTP请求。HTTP请求由以下几个部分组成:

  • 请求行:请求行包含了请求方法(如GET、POST、PUT等)、请求的资源路径(如/index.html)和HTTP协议版本(如HTTP/1.1)。
  • 请求头:请求头包含了请求的一些附加信息,如请求的语言(如Accept-Language: zh-CN)、请求的编码(如Accept-Encoding: gzip, deflate)等。
  • 请求体:请求体包含了请求的数据,如表单数据(如username=john&password=doe)或JSON数据(如{"username": "john", "password": "doe"})。

解析HTML

服务器收到HTTP请求后,会返回一个HTTP响应。HTTP响应由以下几个部分组成:

  • 状态行:状态行包含了响应的状态码(如200 OK、404 Not Found等)和状态信息(如OK、Not Found等)。
  • 响应头:响应头包含了响应的一些附加信息,如响应的语言(如Content-Language: zh-CN)、响应的编码(如Content-Encoding: gzip, deflate)等。
  • 响应体:响应体包含了响应的数据,如HTML代码、CSS样式表、JavaScript脚本等。

浏览器收到HTTP响应后,会对响应体中的HTML代码进行解析。HTML解析过程如下:

  1. 浏览器首先会将HTML代码中的标签转换为DOM树。
  2. 浏览器会根据DOM树构建渲染树。
  3. 浏览器会根据渲染树计算每个元素的布局。
  4. 浏览器会根据布局信息将元素绘制到屏幕上。

渲染页面

在解析完HTML代码后,浏览器就开始渲染页面。渲染过程如下:

  1. 浏览器会根据渲染树计算每个元素的布局。
  2. 浏览器会根据布局信息将元素绘制到屏幕上。
  3. 浏览器会根据元素的样式信息对元素进行修饰。
  4. 浏览器会根据元素的交互信息对元素添加交互效果。

浏览器缓存

浏览器为了提高网页的加载速度,会将一些资源缓存到本地。浏览器缓存机制如下:

  • 浏览器会将请求过的资源缓存到本地。
  • 当浏览器再次请求同一个资源时,会首先检查本地是否有缓存。
  • 如果本地有缓存,浏览器会直接使用缓存的资源。
  • 如果本地没有缓存,浏览器会向服务器发送请求,获取最新的资源。

浏览器缓存机制可以有效地提高网页的加载速度,特别是对于那些经常访问的网站。