从浏览器地址栏输入url到显示页面的步骤

输入URL到HTTP请求返回的过程

  1. Redirect跳转
    1. url 回车 Redirect,当存在 301 请求返回过,浏览器记录过,这类请求开始就要 Redirect。
  2. App cahce应用缓存
    1. 没缓存,发送请求
    2. 有缓存,浏览器会根据资源是否设置过 Cache-Control
      1. 判断是否过期,过期,发送请求与服务端进行验证。
      2. 没过期,读取缓存
      3. 检验过期通常有两个HTTP头进行控制ExpiresCache-Control
        • HTTP1.0提供Expires,值为一个绝对时间表示缓存过期日期
        • HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大过期时间
  3. DNS查找,域名解析,根据域名查找到对应 ip 地址。
  4. 创建 TCP 连接,http三次握手,https 如何创建,http2 如何创建
    1. http三次握手,为了确认网络是联通的。
      1. 客户端发送一个TCP的SYN=1,Seq=X的包到服务器端口
      2. 服务器发回SYN=1, ACK=X+1, Seq=Y的响应包
      3. 客户端发送ACK=Y+1, Seq=Z
    2. https 握手过程,加密传输,确定最终数据传输的秘钥。
      1. 客户端生成随机数和支持的加密套件给服务端
      2. 服务端生成随机数证书(公钥)给客户端。
      3. 客户端根据公钥生成预主密钥(生成随机数,并使用公钥加密),传输给服务端。这个过程无法被解析。
      4. 服务端根据私钥解密预主密钥得到真正的预主密钥(随机字符串)。
      5. 客户端和服务端对这三个随机数进行算法操作,生成主密钥。由于最后的随机字符串别人拿不到,所以主密钥也是没办法破解的。
      6. 后期传输数据,通过主密钥进行加密。
    3. http2 只需要简历一次 tcp 链接即可。可以进行信道复用和分帧传输。
  5. Request 发送请求,发送的过程中,可能会经过代理服务器或从代理服务器的缓存中读取。

接收请求到显示页面的过程

  1. 浏览器检查响应状态吗:是否为1XX,3XX, 4XX, 5XX,这些情况处理与2XX不同
  2. 如果资源可缓存,进行缓存
  3. 对响应进行解码(例如gzip压缩)
  4. 根据资源类型决定如何处理(假设资源为HTML文档)
  5. 解析HTML文档,构件DOM树,下载资源,构造CSSOM树,执行js脚本,这些操作没有严格的先后顺序,以下分别解释
  6. 构建DOM树
    1. Tokenizing:根据HTML规范将字符流解析为标记
    2. Lexing:词法分析将标记转换为对象并定义属性和规则
    3. DOM construction:根据HTML标记关系将对象组成DOM树
  7. 解析过程中遇到图片、样式表、js文件,启动下载
  8. 构建CSSOM树
    1. Tokenizing:字符流转换为标记流
    2. Node:根据标记创建节点
    3. CSSOM:节点创建CSSOM树
  9. 根据DOM树和CSSOM树构建渲染树:
    1. 从DOM树的根节点遍历所有可见节点,不可见节点包括:1)script,meta这样本身不可见的标签。2)被css隐藏的节点,如display: none
    2. 对每一个可见节点,找到恰当的CSSOM规则并应用
    3. 发布可视节点的内容和计算样式
  10. js解析如下
    1. 浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loading
    2. HTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容
    3. 当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素
    4. 当文档完成解析,document.readState变成interactive
    5. 所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()
    6. 浏览器在Document对象上触发DOMContentLoaded事件
    7. 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件
  11. 显示页面(HTML解析过程中会逐步显示页面)

转载于:https://juejin.im/post/5ba74ef2f265da0aa74f2899

你可能感兴趣的:(从浏览器地址栏输入url到显示页面的步骤)