浏览器的工作原理

从输入一个url到页面加载完成,中间都发生了什么?
参考原文地址

首先在浏览器地址栏输入一个地址并回车之后,

1. DNS查找

浏览器会进行DNS查找,把域名https://example.com转化为真实的IP地址10.29.33.xx,根据IP地址找到提供网站内容的服务器。

2. TCP握手、建立连接

找到服务器之后,浏览器会通过TCP握手机制跟浏览器建立连接,如图:
请添加图片描述

而现在大部分服务器传输都是基于HTTPS协议的,那么就会多一步TLS握手,建立加密的隧道,保证数据传输不被监听和篡改,如图:
请添加图片描述

3. 发起请求、接收响应

建立好浏览器和服务器之间的连接后,浏览器会发起HTTP或者HTTPS请求,来获取服务器响应,一般对于网站来说,响应就是服务器返回的HTML网页代码。这里在接收响应时,有一个slow start机制(受制于TCP连接,浏览器会先收到前14KB的数据),后续才会慢慢增加传输速率,下载其他文件。
所以,对服务器来说,能在这24KB数据里完整展示页面就非常重要。
请添加图片描述

4. 渲染页面

在收到html代码之后,浏览器开始渲染页面,这个过程分为5步:

(1)构建DOM树

解析html并构建DOM树,(DOM树是html文档在浏览器中的对象表示,可以使用js来操作DOM树)在这里插入图片描述
浏览器在解析html的时候是顺序执行的,并且只有一个主线程负责解析,当解析到script标签时,浏览器会加载javascript文件并执行其中的代码,此时主线程暂停解析html文档,等javascript文件中代码执行完后,对html文档的解析才会继续。

对于图片img或者CSS文件,或者设置了defer\async的javascript标签,不会影响主线程的解析,而是会创建线程,异步加载,(其中,对于defer属性的javascript标签,加载完后要等DOM树构建完成之后才会被执行)。
请添加图片描述

(2) 构建CSSOM树

CSSOM是CSS文件在浏览器中的对象表示,也是树状结构。如图:请添加图片描述

(3)合并DOM和CSSOM

浏览器会从DOM的跟节点开始,合并CSSOM中的样式到DOM树中的每个节点,形成一颗渲染树请添加图片描述

(4)布局

生成渲染树之后,浏览器会根据生成的样式,计算每个可见节点,也就是没有设置display:none; 的节点,对除display:none; 以外的节点计算他们的宽高和位置等,对所有的节点进行布局规划。请添加图片描述

对于像图片这样的节点,如果没有指定宽高,浏览器会先忽略他的大小,在图片加载完成后,浏览器会根据图片的宽高和位置,再次对受影响的其他节点的宽高位置进行计算,这个过程就叫做回流(reflow)。请添加图片描述

(5)重绘

在第一次布局完成之后,浏览器会真正地把节点和节点样式,例如背景、阴影、边框等绘制到屏幕上,这个过程要求必须要快,否则会影响动画和交互性能。如果之前布局发生了回流(也就是加载了图片),浏览器会发生重绘,把变化的布局重新绘制,
第一次绘制:第一次绘制
重绘: 请添加图片描述

绘制期间可能会有组合发生,因为在渲染节点时可能会产生新的图层,例如:video标签或者设置了opacity等属性的节点,浏览器需要把这些图层组合起来,按正确的堆叠顺序渲染。请添加图片描述

以上过程包含的知识点:

1. 前后端交互- HTTP协议

HTTP协议包含客户端和服务端2个实体,客户端发送请求给服务端,服务端返回响应给客户端。
在HTTP中,数据称为资源,可以是html文档、图片、也可以是普通文本。
资源是通过URL进行定位的,URL结构如下:
请添加图片描述
HTTP请求内容:
请添加图片描述
GET是默认请求方式,意思是从服务端获取资源,常用还有:
POST请求,创建资源
PUT请求,更新资源,
DELETE请求,删除资源
区别是:GET和DELETE通常没有请求体,POST和PUT通常带有请求体,

请求头:包含额外信息来帮助服务器决定如何响应,比如:使用Accept设置接收响应的类型。
服务器端在处理好请求后发送响应给客户端,
请添加图片描述
响应状态码取值及对应表示:请添加图片描述
响应头与请求头类似,包含额外的响应信息,比如:告知客户端如何控制缓存和cookie。
响应体是服务端返回的数据。

HTTP请求是无状态的:每次客户端发送的请求都被认为是从一台新的客户端发送过来的,如果需要记录状态,应该使用cookie和session来记录会话(实现登录和购物车之类的功能)

HTTP/2

区别于HTTP/1.1,数据通过二进制形式进行传输,不再是文本形式;多路复用,建立连接后可以一次发送多个HTTP请求;压缩HTTP headers,减少负载;支持Server Push

HTTPS

在标准HTTP中,客户端和服务端交互的信息都是通过公共互联网进行传输的,由于传输的内容是明文所以当传输一些敏感信息时很容易被监听盗取,为了加强安全性,HTTPS(更安全的超文本传输协议)诞生。
HTTPS会加密传输的数据,他通过两个协议来保障数据安全,一个是SSL,一个是TSL,(原理基本都是通过服务器端对客户端进行身份验证,然后对数据加密什么的)。

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

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

相关文章

探索C++中的动态数组:实现自己的Vector容器

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

Android Studio下运行java main 方法

方法一 修改项目的.idea中的gradle.xml文件&#xff0c;在GradleProjectSettings标签下添加一行代码 <option name"delegatedBuild" value"false" />方法二 main方法上右键选择Run ‘xxx’ with Coverage

视觉图像处理和FPGA实现第三次作业--实现一个加法器模块

一、adder模块 module adder(ina, inb, outa); input [5:0] ina ; input [5:0] inb ; output [6:0] outa ;assign outa ina inb; endmodule二、add模块 module add(a,b,c,d,e); input [5:0] a ; input [5:0] b ; input [5:…

1.1计算机系统构成及硬件系统知识(上)

基础知识部分----chap01 主要议题&#xff1a; 数制转换&#xff1a;一般会涉及存取的计算&#xff1b;ip地址中变长子网掩码的计算题&#xff1b;&#xff08;难度较大&#xff09; 数的表示&#xff1a;二进制、十六进制&#xff1b; 计算机的组成&#xff1a;考察的较为深入…

30天学会QT(进阶)--------------第二天(创建项目)

1、如何规范的创建一个项目 由于本人也是从其他的项目上学来的&#xff0c;所以也不算是业界规范&#xff0c;每个公司或者个人都有自己的方式去创建项目&#xff0c;项目的创建是本着简洁&#xff0c;明了&#xff0c;方便而言的&#xff0c;所以对于我来说&#xff0c;不繁琐…

nginx启动闪退

在nginx目录下cmd&#xff0c;nginx -t&#xff0c;找到原因是&#xff1a;“在端口80上运行NGINX时&#xff0c;因为端口80是HTTP默认端口&#xff0c;需要管理员权限才能访问” 所以修改端口号&#xff1a; 在nginx.conf文件中&#xff0c;修改listen&#xff1a;80为8080 …

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

2024年 JavaScript 最新功能一览

前言 随着 Web 技术的日新月异&#xff0c;JavaScript 也在不断地吸收新的特性和技术&#xff0c;以满足日益复杂和多样化的开发需求。在 2024 年&#xff0c;JavaScript 迎来了一系列令人瞩目的新功能&#xff0c;这些功能不仅提升了开发者的效率&#xff0c;也极大地丰富了 …

无缝集成 MongoDB Relational Migrator,Tapdata 提供关系型到 MongoDB 实时迁移优化方案

在去年的 MongoDB 用户大会纽约站上&#xff0c;MongoDB 正式宣布全面推出新工具 MongoDB Relational Migrator&#xff08;MongoDB RM&#xff09;&#xff0c;用以简化应用程序迁移和转换——即从传统关系型数据模型到现代的文档数据模型&#xff0c;助力组织快速提升运营效率…

Seata源码流程图

1.第一阶段分支事务的注册 流程图地址&#xff1a;https://www.processon.com/view/link/6108de4be401fd6714ba761d 2.第一阶段开启全局事务 流程图地址&#xff1a;https://www.processon.com/view/link/6108de13e0b34d3e35b8e4ef 3.第二阶段全局事务的提交 流程图地址…

考研失败, 学点Java打小工——Day2

1 关键字 标识符 基本数据类型 感觉和C没啥区别  1.1 关键字    public、static、void…  1.2 标识符    ①不能用关键字    ②由字母、数字、下划线、$组成&#xff0c;但是不能以数字开头    ③给变量起名字的时候要起有意义的名字&#xff1a;“见名知意” 1.…

常青内容与病毒式内容——哪个更适合 SEO?

常青内容是经得起时间考验的内容&#xff0c;而病毒式内容则是利用特定时代潮流的内容。 如果你曾经考虑过为网站添加内容&#xff0c;你可能听说过常青内容和病毒式内容这两个词。这两个词涵盖了网站所需的基本内容类型。 那么&#xff0c;这两者之间有什么区别&#xff1f;…

综合实验---Web环境搭建

题目&#xff1a; 服务器IP地址规划&#xff1a;client&#xff1a;12.0.0.12/24&#xff0c;网关服务器&#xff1a;ens36:12.0.0.1/24、ens33&#xff1a;192.168.10.1/24&#xff0c;Web1&#xff1a;192.168.10.10/24&#xff0c;Web2&#xff1a;192.168.10.20/24&#xf…

【网络安全】漏洞挖掘入门教程(非常详细)

温馨提示&#xff1a; 初学者最好不要上手就去搞漏洞挖掘&#xff0c;因为漏洞挖掘需要很多的系统基础知识和一些理论知识做铺垫&#xff0c;而且难度较大…… 较合理的途径应该从漏洞利用入手&#xff0c;不妨分析一些公开的CVE漏洞。很多漏洞都有比较好的资料&#xff0c;分…

(学习日记)2024.03.09:UCOSIII第十一节:就绪列表

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

mqtt mosquitto 资料

MQTT 3.1.1 协议中文版 | MQTT中文网mqtt中文网http://mqtt.p2hp.com/mqtt311MQTT Version 3.1.1http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718009 mqttclient: 一个基于socket API之上的跨平台MQTT客户端&#xff0c;拥有非常简洁的API接口…

CVE-2023-38836 BoidCMSv.2.0.0 后台文件上传漏洞

漏洞简介 BoidCMS是一个免费的开源平面文件 CMS&#xff0c;用于构建简单的网站和博客&#xff0c;使用 PHP 开发并使用 JSON 作为数据库。它的安装无需配置或安装任何关系数据库&#xff08;如 MySQL&#xff09;。您只需要一个支持PHP 的Web服务器。在 BoidCMS v.2.0.0 中存…

水库泄洪监测预警系统解决方案

一、方案概述 近年来由于危险河道管理措施不到位&#xff0c;调峰水库泄水风险长期存在&#xff0c;信息通报制度缺失以及民众安全警觉性不高等因素导致的水库泄洪时冲走下游河道游客以及人民财产的事故频发。水库安全度汛是全国各地防汛抗洪的重中之重&#xff0c;而水库泄洪监…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论二】

前言&#xff1a; 本篇主要参考《Wasserstein GAN and the Kantorovich-Rubinstein Duality》 重点介绍一下 WGAN 的损失函数 是如何通过 Wasserstein Distance 变换过来的。 分为5步&#xff1a; 我们首先建立Wasserstein Distance 极小值形式&#xff0c; 经过对…

Linly-Talker智能数字人实时对话系统如何部署体验

环境&#xff1a; Linly-Talker 问题描述&#xff1a; Linly-Talker智能数字人实时对话系统如何部署体验 Linly-Talker 是一个智能 AI 系统&#xff0c;它将大型语言模型 &#xff08;LLMs&#xff09; 与视觉模型相结合&#xff0c;创造出一种新颖的人机交互方式。它集成了…