用户从输入 url 到浏览器响应,呈现给用户的具体过程

1、用户在输入栏输入地址

  (1) 如果有 beforeunload 事件会先执行判断继续还是跳出操作

  (2) 浏览器进程识别是 地址还是关键字检索

  (3) 将正确的 url 地址发送给网络进程

2、网络进程查看有没有缓存

  (1) 有缓存直接返回数据

  (2) 没有缓存直接进入网络进程请求流程

3、浏览器进程查询 DNS 获取服务器 ip 地址

  (1) 如果请求协议是 https 那么还需要建立TLS连接

  (2) 利用ip地址和服务器建立 tcp 连接

  (3) 如果浏览器的 tcp 连接请求有 6个,则需要排队等待

4、tcp 连接协议通过与服务器进行3次握手确立连接

  (1) 浏览器即用户端发起第一次握手

  (2) 服务器接收到用户端的消息发起接收到信息

  (3) 用户端接收到信息后向服务器发起第三次握手表示已经接收到信息可以连接

  (4) 如果第二次握手发送数据包丢失或者用户端发起第三次握手数据包丢失,服务器在长时间未接收到信息会再次发起,总共会尝试6次

5、tcp 接受信息

6、网络进程接收到数据后将返回头和返回体发送给浏览器

7、浏览器进程读取返回头查看返回信息,是否重定向或者响应数据类型处理

  (1) 重定向即回到第3步

  (2) 会根据 Content-Type 的值来决定如何显示响应体的内容。

  (3) Content-Type 为下载类型就会把请求交给浏览器的下载管理器,导航结束

  (4) 如果是 HTML,那么浏览器则会继续进行导航流程

8、准备渲染进程

  (1) 默认打开一个新的渲染进程

  (2) 如果从一个页面打开了另一个新页面,而新页面和当前页面属于同一站点的话,那么新页面会复用父页面的渲染进程

9、浏览器进程接收到网络进程的响应头数据之后,便向渲染进程发起“提交文档”的消息

10、渲染进程就和网络进程直接建立连接进行管道数据传输

11、数据传输完成后tcp发起4次挥手断开连接并且渲染进程同时向浏览器进程发起确认提交

12、浏览器进程收到确认提交后会更新浏览器界面状态,包括了安全状态、地址栏的 URL、前进后退的历史状态。

13、渲染进程开始页面解析和子资源加载

那么导航被提交之后又会怎么样呢

14、首先渲染进程先将HTML(超文本标记语言)转换成为浏览器可以识别的 DOM 树节点

15、进行样式计算,渲染进程将下载好的 CSS(层叠样式表) 转化成为浏览器使用的样式

  (1) 将所有的 CSS 样式转换成为 浏览器可以理解的 styleSheets 结构

  (2) 转化所有的 CSS样式表的属性值,使其标准化,例如 color #···· -> rgba模式

  (3) 计算合成为 computedStyle 样式

16、接下来就是布局阶段,通过DOM和computedStyle 创建布局树并计算布局信息

  (1) 遍历所有可见的 DOM 节点

  (2) 忽略掉不可见节点 例如:display:none,head标签下的所有内容

17、对布局树进行分层,并生成分层树。

  (1) 拥有层叠上下文属性的元素会被提升为单独的一层

  (2) 需要剪裁(clip)的地方也会被创建为图层

18、为每个图层生成绘制列表,并将其提交到合成线程。

19、合成线程将图层分成图块,并在光栅化线程池中将图块转换成位图。

20、合成线程发送绘制图块命令 DrawQuad 给浏览器进程。

21、浏览器进程根据 DrawQuad 消息生成页面,并显示到显示器上。

  这样一个完整的浏览器导航流程就结束了

浏览器从输入url 到页面展示完成响应过程的更多相关文章

  1. 《浏览器工作原理与实践》<04>从输入URL到页面展示,这中间发生了什么?

    “在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络.操作系统.Web 等一系列的知识. 在面试应聘者时也必问这 ...

  2. 【原】老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...

  3. 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3

    备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...

  4. 【转】老生常谈-从输入url到页面展示到底发生了什么

    今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...

  5. (转)老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索"从输入url到页面展示到底发生了什么",你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么 ...

  6. 转载--从输入URL到页面展示到底发生了什么

    最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...

  7. 从输入 URL 到页面展示,到底发生了什么

    从输入 URL 到页面展示,到底发生了什么 1.输入URL 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应 ...

  8. 从输入 URL 到页面展示,这中间发生了什么?

    当面试官问到,请你说说看"从输入 URL 到页面展示,这中间发生了什么?" 以前的我是这样回答的: 用户输入URL后,向服务器端发起请求.如果顺利,得到网络响应之后,浏览器对资源进 ...

  9. 从输入URL到页面展示,这中间都发生了什么?

    前言 在浏览器里,从用户输入URL到页面展示,这中间都发生了什么?这是一道非常经典的面试题.这里边涉及很多知识点,比如:网络协议.页面渲染.操作系统等.所以这是很好很全面的考察一个前端的知识.下面我将 ...

随机推荐

  1. 带你认识“货真价实”的P2P网贷风控

      文/杨帆 说起P2P,多数金融圈内人士已经并不陌生.国内现有近千家的P2P网贷平台,动辄打出高息诱人的收益率宣传口号以及眼花缭乱的安全承诺.但是在这些浮华表面的背后,关于P2P的风控很多人仍然是一 ...

  2. hiveservice简介

    由于实验的须要,这两天就搭了个Hive,简单记录一下: 平台:OS:Ubuntu Kylin 14.04 JAVA:Java 1.8.0_25 HADOOP:Hadoop 2.4.0 HIVE:Hiv ...

  3. 几种常见排序算法的基本介绍,性能分析,和c语言实现

    本文介绍6种常见的排序算法,以及他们的原理,性能分析和c语言实现: 为了能够条理清楚,本文所有的算法和解释全部按照升序排序进行 首先准备一个元素无序的数组arr[],数组的长度为length,一个交换 ...

  4. linux内存池

    在内核中有不少地方内存分配不允许失败. 作为一个在这些情况下确保分配的方式, 内核 开发者创建了一个已知为内存池(或者是 "mempool" )的抽象. 一个内存池真实地只是一 类 ...

  5. url查找参数

    function GetUrlParam(paraName) { var url = document.location.toString(); var arrObj = url.split(&quo ...

  6. CentOS yum有时出现“Could not retrieve mirrorlist ”的解决办法——resolv.conf的配置

    国内服务器在运行命令yum -y install wget的时候,出现: Could not retrieve mirrorlist http://mirrorlist.centos.org/?rel ...

  7. Linux 内核提交 urb

    一旦 urb 被正确地创建,并且被 USB 驱动初始化, 它已准备好被提交给 USB 核心来发送 出到 USB 设备. 这通过调用函数 usb_submit_urb 实现: int usb_submi ...

  8. 2018-2-13-win10-uwp-从Type使用构造

    title author date CreateTime categories win10 uwp 从Type使用构造 lindexi 2018-2-13 17:23:3 +0800 2018-2-1 ...

  9. 个人脚手架搭建 -- charmingsong-cli

    个人脚手架搭建 -- charmingsong-cli 目的 为了解决多次构建相同功能的项目,在一定程度上需要定制化以及私有化设置 设计 问题 为什么不用现成的脚手架生成? 如果利用vue或者reac ...

  10. vue-learning:12 - 2 - 区分:outerHTML - innerTHML - outerText - innerText - textContent

    区分:outerHTML - innerTHML - outerText - innerText - textContent 获取值 <div id="outer"> ...