输入URL到HTTP请求返回的过程
- Redirect跳转
- url 回车 Redirect,当存在 301 请求返回过,浏览器记录过,这类请求开始就要 Redirect。
- App cahce应用缓存
- 没缓存,发送请求
- 有缓存,浏览器会根据资源是否设置过 Cache-Control
- 判断是否过期,过期,发送请求与服务端进行验证。
- 没过期,读取缓存
- 检验过期通常有两个HTTP头进行控制
Expires
和Cache-Control
:- HTTP1.0提供Expires,值为一个绝对时间表示缓存过期日期
- HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大过期时间
- DNS查找,域名解析,根据域名查找到对应 ip 地址。
- 创建 TCP 连接,http三次握手,https 如何创建,http2 如何创建
- http三次握手,为了确认网络是联通的。
- 客户端发送一个TCP的SYN=1,Seq=X的包到服务器端口
- 服务器发回SYN=1, ACK=X+1, Seq=Y的响应包
- 客户端发送ACK=Y+1, Seq=Z
- https 握手过程,加密传输,确定最终数据传输的秘钥。
- 客户端生成随机数和支持的加密套件给服务端
- 服务端生成随机数和证书(公钥)给客户端。
- 客户端根据公钥生成预主密钥(生成随机数,并使用公钥加密),传输给服务端。这个过程无法被解析。
- 服务端根据私钥解密预主密钥得到真正的预主密钥(随机字符串)。
- 客户端和服务端对这三个随机数进行算法操作,生成主密钥。由于最后的随机字符串别人拿不到,所以主密钥也是没办法破解的。
- 后期传输数据,通过主密钥进行加密。
- http2 只需要简历一次 tcp 链接即可。可以进行信道复用和分帧传输。
- http三次握手,为了确认网络是联通的。
- Request 发送请求,发送的过程中,可能会经过代理服务器或从代理服务器的缓存中读取。
接收请求到显示页面的过程
- 浏览器检查响应状态吗:是否为1XX,3XX, 4XX, 5XX,这些情况处理与2XX不同
- 如果资源可缓存,进行缓存
- 对响应进行解码(例如gzip压缩)
- 根据资源类型决定如何处理(假设资源为HTML文档)
- 解析HTML文档,构件DOM树,下载资源,构造CSSOM树,执行js脚本,这些操作没有严格的先后顺序,以下分别解释
- 构建DOM树:
- Tokenizing:根据HTML规范将字符流解析为标记
- Lexing:词法分析将标记转换为对象并定义属性和规则
- DOM construction:根据HTML标记关系将对象组成DOM树
- 解析过程中遇到图片、样式表、js文件,启动下载
- 构建CSSOM树:
- Tokenizing:字符流转换为标记流
- Node:根据标记创建节点
- CSSOM:节点创建CSSOM树
- 根据DOM树和CSSOM树构建渲染树:
- 从DOM树的根节点遍历所有可见节点,不可见节点包括:1)
script
,meta
这样本身不可见的标签。2)被css隐藏的节点,如display: none
- 对每一个可见节点,找到恰当的CSSOM规则并应用
- 发布可视节点的内容和计算样式
- 从DOM树的根节点遍历所有可见节点,不可见节点包括:1)
- js解析如下:
- 浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loading
- HTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容
- 当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素
- 当文档完成解析,document.readState变成interactive
- 所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()
- 浏览器在Document对象上触发DOMContentLoaded事件
- 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件
- 显示页面(HTML解析过程中会逐步显示页面)