浏览器的工作原理 - 从输入URL 按下回车到页面展示过程发生了什么?

本文带大家一起了解一下从我们输入一个网址链接开始到页面展示在我们面前,整个浏览器发生了什么?或者说浏览器做了哪些事,咱们以大家常用的baidu.com为例,从输入到 baidu.com 页面出现的整个流程

第一步:地址栏中敲击第一个按键 ‘B’

当你输入了字母 ‘b’ ,此时你会发现地址栏下方出现了网址提醒,如下图所示
在这里插入图片描述
这是因为浏览器根据自己的算法优先考虑根据你的搜索历史和书签等内容给出建议。

第二步:按下回车键 开始等待

2.1解析URL

通过 URL 浏览器能够判断请求类型是网址还是搜索关键字
首先判断 输入内容的 协议和主机名 ,URL的组成如下:

  1. 协议(http、https、ftp 等请求协议); - https://
  2. 服务地址(域名 或者 IP地址+[端口号]); - www.baidu.com
  3. 资源路径 - / 表示根路径
  4. 文件名 - index.html 根路径下的 index.html 文件
    实例: https://www.baidu.com/index.html
    当输入内容不符合上述规范的时候,浏览器会将输入内容直接交给默认的搜索引擎进行处理
    当输入内容符合上述规范的时候,会将 URL 进行进一步的处理,判断 URL 中有没有非 ASCII 的字符,比如我们常见的汉字或者特殊符号,会被转换为 Unicode 字符

2.2 DNS查询

  1. 浏览器检查 URL中的域名是否在缓存中,如果缓存中没有就调用 获取主机名 的库函数进行查询;
  2. 在试图进行 DSN 解析之前,首先检查本地 hosts 文件中有没有,如果hosts 文件中也没有的话则会向 DNS 服务器发送一条 DNS(DNS 服务器是有网络通信站提供的,通常是 本地路由器或者 ISP 的缓存 DNS 服务器)查询请求,接下来就是 IP 寻址了,过程相对复杂,篇幅有限,可以自行查阅相关信息。寻址成功后建立 TCP 连接。建立完链接之后才能发起 HTTP 请求

2.3 HTTP 请求发起和响应

  1. 建立起安全的加密信道后,浏览器开始发送 HTTP 请求,HTTP 请求报文由 请求行、请求头、空行、实体(如果是 GET 请求则没有)组成。具体的大家可以查阅一下 HTTP 请求报文的构成。
  2. 服务器端处理请求/响应,返回一个响应码,指示这次请求的状态,以及返回请求资源信息。

2.4 浏览器解析资源

当服务器提供了资源之后(HTML、CSS、JS 、图片等),会执行如下操作:

  1. 解析 HTML、CSS、JS
  2. 渲染 构建DOM树 - 渲染 - 布局 - 绘制

2.4.1 HTML 解析

浏览器渲染引擎把获取到的 HTML 文档进行解析生成 DOM 树。每个浏览器的解析算法可能不同,但是解析标准都是按照 web 标准 HTML5 等标准规范进行标记化和树的构建。
解析完成后开始加载网页的外部资源(CSS、图像、JS 文件等)

2.4.2 CSS 解析

根据 CSS 词法和语法分析 CSS 文件 和 style 标签包含的内容以及属性的值,每个 CSS 文件都被解析成一个样式表对象。生成一个 CSS Rule Tree。

2.4.3 页面渲染

  1. 通过遍历 DOM节点树,并计算每个节点的 CSS 样式值,进行计算元素的位置,宽高,内外边距等样式自底向上计算每个节点的尺寸,构建每个节点的坐标,当出现浮动或者定位元素的时候会有更多复杂的计算;
  2. GPU 渲染,图形处理层通用用途的CPU,也可能使用图形处理器GPU。

2.4.4 JavaScript 引擎

专门处理 JavaScript 脚本的虚拟机,其作用是 解析 JS 代码并把逻辑(HTML 和 CSS的操作)应用到DOM 元素中,从而呈现相应的结果。

2.4.5 rendTree 渲染树

是浏览器引擎通过 DOM 树和 CSS Rule Tree 构建出来的一个 树状结构,和 DOM 树不一样的是,它只要最终输出呈现的内容,display 为 none 的不会存在 rendTree 中。
重排:当rendTree 中任一节点几何尺寸发生变化,rendtree 就会重新布局,叫重排;
重绘:当 rendTree 中任一元素的样式属性(几何属性没变)发生变化,rendTree 就会重新画一下样式,比如文字颜色、背景等发生变化,这个过程叫重绘。
浏览器最终渲染的内容就是 rendTree 的展现结果

第三步:你看到了返回的页面展示

至此,浏览器已经把你的请求处理完了。

参考资料:
了解浏览器架构
浏览器工作原理
当···时发生了什么?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262937.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海外社媒营销新趋势,品牌出海如何做?

社交媒体在网上的影响力是毋庸置疑的。投资社交媒体平台并建立公司形象,提高产品运营收入,提升品牌知名度,对于吸引对您所提供的产品感兴趣的人至关重要。 然而,社交媒体格局总是在变化,这意味着您需要掌握新的社交媒…

【Linux进阶之路】线程

文章目录 一、初始线程1.概念2.执行3.调度4.切换 二、线程控制1.创建2.等待3.分离4.退出5.取消 三、线程安全1.互斥1.1初始1.2理解1.3锁1.3.1概念1.3.2原理1.3.4死锁 2.同步2.1概念2.2原理 3.生产消费者模型 总结尾序 一、初始线程 1.概念 简单的概念: 线程就是一…

全球盲盒热潮:探寻海外市场的文化风潮与商机

近年来,盲盒经济在全球范围内持续升温,其独特的营销方式以及带给消费者的刺激感,引发了广大消费者的热烈追捧。特别是在海外市场,其增长速度之快,让各类盲盒品牌看到了巨大的商业潜力。然而,盲盒市场的快速…

使用工具类Exectors创建线程池

大型并发项目 不能使用Executors 通过ThreadPoolExector的方式 核心线程配置方式: 计算密集型的任务 核心线程数量 CPU的核数 1 IO密集型的任务 核心线程数量 CPU的核数*2 演示: Callable import java.util.concurrent.Callable;public class MyCallable implements Callab…

playbook控制语句

本章主要介绍 playbook中的控制语句。 目录 判断语句when &#xff08;1&#xff09;when判断中>、<、!的使用 &#xff08;2&#xff09;when判断中in的用法 &#xff08;3&#xff09;when判断中is的用法 判断语句block-rescue 循环语句 一个play中可以包含…

品牌出海如何做?海外社媒营销新趋势

社交媒体在网上的影响力是毋庸置疑的。投资社交媒体平台并建立公司形象&#xff0c;提高产品运营收入&#xff0c;提升品牌知名度&#xff0c;对于吸引对您所提供的产品感兴趣的人至关重要。 然而&#xff0c;社交媒体格局总是在变化&#xff0c;这意味着您需要掌握新的社交媒…

xposed 01 - 环境搭建

简介 Xposed的作者是rovo89&#xff0c;但是更新完 8.1 的 beta 版之后就不更新了。由于Android新版本的普及&#xff0c;目前新上市的手机基本都是8.0以上。所以Xposed框架已经不适用。EdXposed团队成为Xposed停止更新后的官方接任者。 当然现在有更好的 LSPosed https://git…

v-if与v-show的区别

v-if指令可以控制一个元素的显示和隐藏&#xff0c;那么它是如何实现的&#xff1f;它和看起来很像的v-show指令有什么区别呢&#xff1f; 如果v-if指令的值为假&#xff0c;那么这个元素不会被插入DOM。 下面的代码 <div v-if"true">one</div><div…

05-垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器Serial收集器Parallel Scavenge收集器ParNew收集器CMS收集器 CMS的相关核心参数亿级流量电商系统如何优化JVM参数设置(ParNewCMS) 垃圾收集底层算法实现三色标记多标-浮动垃圾漏标-读写屏…

高级算法设计与分析(六) -- 分支限界法

系列文章目录 高级算法设计与分析&#xff08;一&#xff09; -- 算法引论 高级算法设计与分析&#xff08;二&#xff09; -- 递归与分治策略 高级算法设计与分析&#xff08;三&#xff09; -- 动态规划 高级算法设计与分析&#xff08;四&#xff09; -- 贪心算法 高级…

数字滤波器的设计

一般滤波器可以分为经典滤波器和数字滤波器。 经典滤波器&#xff1a;假定输入信号中的有用成分和希望去除的成分各自占有不同的频带。如果信号和噪声的频谱相互重迭&#xff0c;经典滤波器无能为力。比如 FIR 和 IIR 滤波器等。  现代滤波器&#xff1a;从含有噪声的时间序…

Envoy

一. Envoy ). Envoy Envoy 于 2017 年 9 月作为孵化项目加入 CNCF。从孵化到毕业&#xff0c;Envoy 都是 CNCF 增长最快的项目之一 Envoy 在吞吐量和延迟方面都表现良好。这在大型云原生部署中至关重要 Envoy 是专为大型现代 SOA&#xff08;面向服务架构&#xff09;架构设计…

python:删除空白

删除字符串末尾的空白 例如&#xff0c;下面的代码&#xff0c;变量hobby指向的字符串在末尾有一个空格&#xff1a; 可以使用函数rstrip()删除字符串末尾的空格&#xff0c;如下&#xff1a; 因为删除字符串末尾的空格并没有赋值给原变量hobby&#xff0c;所以此时查看hobb…

基于ssm房屋租赁平台的设计与开发论文

摘 要 目前对于在外的人员来说租赁房屋是最基本的问题。对于房屋的租赁可以选择直接找房东、找专业的房屋租赁公司和自己在网上找房屋。自己找房东的问题在于需要时间&#xff0c;而且对于需要提前租赁房屋的需要多次跑到小区&#xff0c;找中介租赁房屋的问题在于费用问题&am…

FPGA未解之谜

一.ila一会能加载出波形&#xff0c;一会加载不出波形——在自己做的v7开发板中遇到&#xff0c;其他开发板从未遇到过 1.小梅哥说&#xff1a;可能与硬件jtag连接不稳定导致。

CiteSpace最新安装教程

目录 一、CiteSpace特点介绍 二、CiteSpace安装教程 1、安装java 2、配置java环境变量 3、安装CiteSpace 4、运行CiteSpace 一、CiteSpace特点介绍 CiteSpace是一种用于分析学术文献的可视化工具&#xff0c;旨在帮助研究人员理解学术领域的演化、发现研究热点和趋势。 …

【Python】matplotlib画图_折线图

柱状图主要使用plot()函数&#xff0c;基本格式如下&#xff1a; plt.plot(x,y,label成功几率,colorb,marker.,ms8,mfcr,alpha0.5) 主要参数&#xff1a; x&#xff0c;y&#xff1a;xy轴数据 label&#xff1a;数据标签 color&#xff1a;折线颜色 marker&#xff1a;标…

什么是伦敦金的假突破?假突破为何有效?

部分投资者做伦敦金交易的时候喜欢追逐那些强势的行情&#xff0c;也就是我们所说的突破行情。但是突破行情会带来两种结果&#xff0c;一种是突破成功&#xff0c;而另一种是出现假突破。什么是伦敦金中的假突破呢&#xff1f;为什么假突破会有效呢&#xff1f;下面我们就来讨…

基于JAVA+SpringBoot+Vue的前后端分离的问题反馈处理平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在这个信息爆炸的时代…

【自学笔记】Python测试框架pytest

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📝 安装📝 编写测试函数⚓️ 相关链接 ⚓️📖 介绍 📖 pytest 是一个广泛使用的 Python 测试框架,它提供了简单、灵活和可扩展的测试功能。通过 pytest,您可以轻松地创建和运行单元测试、集成测试和功能测试…