之前我们已经讨论过浏览器的渲染原理,今天我们来讨论下更广泛的从输入URL到渲染出页面的过程。

1. 查询该URL是否有缓存

如果有,则直接返回,没有的话,下一步

2. 查询URL对应的IP

  首先,到 host 文件查找,如果找到则返回。

  如果没有找到,去访问 DNS 服务器(一般先访问本地路由器,没有再访问更高级的 DNS 服务器),最终得到对应的 IP

3. 建立 TCP 连接

  首先,通过 IP 协议,指定 出发地 和 目的地

  然后,通过 OSPF 协议,计算路由的最佳路径,得到路过的每个路由器的 IP地址

  然后,再利用 ARP 计算出路径经过每个路由器的 MAC地址

  最后再利用我们熟悉的3次握手,建立连接

4. 如果对方是Nginx服务器

  一般会做负载均衡,根据 url 重写转发到真实处理请求的服务器

5. 根据HTTP状态码来执行对应行为

  如果 200 那就继续解析

  如果 300 的话会进行重定向

  如果 400 或 500 的话就会报错

6. 如果返回来的是gzip格式(content-encoding: gzip content-type:text/html; charset=utf-8)

  浏览器会先解压。

7. 接收 html 字节流

  首先,浏览器把接收到的一个个字节拼接成字符串

  然后,通过词法分析,把字符串转换为一个个 Token

  最后,根据 Token,通过语法分析,构建成 DOM 树

8. 接收 css 字节流

  首先,浏览器把接收到的一个个字节拼接成字符串

  然后,通过词法分析,把字符串转换为一个个 Token

  最后,根据 Token,通过语法分析,构建成 CSSOM 树

9. 结合 CSSOM 和 DOM,生成 Render Tree

9. 遇到 script(有3种可能),如果有相关 DOM 操作,可以修改已构建部分的 DOM 树,从而改变 Render Tree

11. 调用 GPU 绘制,合成图层,将内容显示在屏幕上

从输入URL到浏览页面的过程的更多相关文章

  1. 从浏览器输入url到显示页面的过程 (前端面试题)

    域名DNS解析,解析到真正的IP地址             | 客户端与服务端建立TCP连接,3次握手 | 客户端发送Http请求 | server接收到http请求,处理,并返回 | 客户端接收到 ...

  2. 关于浏览器,从输入URL到呈现页面过程!(主讲TCP/IP协议)

    一.文本对话--从请求到响应 我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容.实际上这个过程是: (1)浏览器向网站所在的服务器发送了一个 Request(请求) (2)网站服务 ...

  3. 从输入 URL 到浏览器接收的过程中发生了什么事情

    从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU  首先是「输入 U ...

  4. 从输入 URL 到浏览器接收的过程中发生了什么事情?

    从输入 URL 到浏览器接收的过程中发生了什么事情? What really happens when you navigate to a URL 上面两篇文章都解读的很好,值得阅读. 接下来在总结一 ...

  5. 在浏览器中输入url地址 -> 显示主页的过程

    -来自<图解HTTP> 最近在进行前端面试方面的一些准备,看了网上许多相关的文章,发现有一个问题始终绕不开: 在浏览器中输入URL到整个页面显示在用户面前时这个过程中到底发生了什么.仔细思 ...

  6. 输入URL地址到页面加载完成 过程

    在浏览器的地址栏中输入URL地址"http://www.gacl.cn:8080/JavaWebDemo1/1.jsp"去访问服务器上的1.jsp这个web资源的过程 1.浏览器根 ...

  7. 输入URL到展现页面的全过程

    最近在看一本关于网络协议的书<图解HTTP> 当我们在浏览器的地址栏输入 http://www.pwstrick.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢? 1.  域名 ...

  8. 浏览器输入URL到响应页面的全过程

    B/S网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,HTTP协议采用无状态的短链接的通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通 ...

  9. 计算机网络【6】—— 从浏览器输入URL到显示页面发生了什么

    当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染. 一.网络通信 互联网内各网络设备间的通信都遵循TCP ...

随机推荐

  1. C#使用消息队列(MSMQ)

    最近项目用到消息队列,找资料学习了下.把学习的结果 分享出来 首先说一下,消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务,也就是Windows操作系统的功能 ...

  2. ubuntu下安装软件时报错解决:Unmet dependencies. Try 'apt-get -f install' with no packages

    在错误后面运行以下代码,补全依赖项: sudo apt-get -f install

  3. centos7上使用git clone出现问题

    centos 7  git clone时出现不支持协议版本的问题 unable to access 'https://github.com/baloonwj/TeamTalk.git/': Peer ...

  4. VBA用户自定义函数(十五)

    函数是一组可重复使用的代码,可以在程序中的任何地方调用.这消除了一遍又一遍地编写相同的代码的需要.这使程序员能够将一个大程序划分成许多小的可管理的功能模块. 除了内置函数外,VBA还允许编写用户定义的 ...

  5. STM8 uart1

    举例 int main() { UART1_DeInit(); //波特率9600,数据位8,停止位1,校验位无,非同步模式,发送接收使能 UART1_Init(9600, UART1_WORDLEN ...

  6. PCI总线学习

    PCI总线概述: 因为不实际操作了,所以就写一些方法论上的东西,纪念一下. PCI总线有三个非常显著的优点: 1. 在计算机和外设传输数据时具有更好的性能. 2. 能够尽量独立于具体的平台. 3. 可 ...

  7. 3-JavaSe-1-stream-1-流库特征

    1.parallelStream可以让流库以并行方式来执行过滤和计数. String content=new String(Files.readAllBytes(Paths.get("D:\ ...

  8. shiro系列五、shiro密码MD5加密

    Shiro-密码的MD5加密   1.密码的加密 在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密 ...

  9. 判断变量是否不为空,函数isset()、!empty()与!is_null()的比较

    转载:https://blog.csdn.net/qq_38812954/article/details/79581785 判断变量的值,尤其是判断他们是否不为空,我们有以下4种方法: if(isse ...

  10. feign.RetryableException: Read timed out executing xxx

    feign.RetryableException: Read timed out executing GET http://common-item/service/item/selectTbItemA ...