Skip to content

从输入 URL 到页面加载完成的过程中都发生了什么事情? #117

Open
@TieMuZhen

Description

@TieMuZhen

一、简单分析

简单的分析,从输入URL到回车后发生的行为如下:

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

二、详细分析

URL解析

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

URL的解析第过程中的第一步,一个url的结构解析如下:

DNS查询

在之前文章中讲过DNS的查询,这里就不再讲述了

整个查询过程如下图所示:

最终,获取到了域名对应的目标服务器IP地址

TCP连接

在之前文章中,了解到tcp是一种面向有连接的传输层协议

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

发送 http 请求

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

请求的内容包括:

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

响应请求

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

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

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

注意

为什么数据传输是用对称加密?

公钥加密数据速度太慢,系统消耗大。对称加密算法性能是非对称的1000倍这个数量级,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。

另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。

页面渲染

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

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

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

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

参考文献

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions