浏览器加载网页过程

article/2025/10/6 21:20:13

1.概要:从用户在浏览器输入域名开始,到web页面加载完毕,这个过程叫做网页加载过程,个人总结,长期更新
2.分析:打开一个网页,浏览器会因为页面上的css/js/image等静态资源多次发起连接请求,所以我暂时把这个网页加载过程分成两部分:
1.html 页面加载过程(假设存在简单的nginx负载均衡)
2.css/js/image等网页静态资源加载 (dns)

2.1页面加载
先上一张图,直观了解下基本的流程,然后再逐一的分析。

大致流程
2.1.1 DNS解析

什么是DNS解析?当用户输入一个网址并按下回车键的时候,浏览器得到一个域名。而在实际通信过程中,我们需要的是一个IP地址,所以我们需要先把域名转换成相应的IP地址,这个过程叫做DNS解析

1.浏览器首先搜索浏览器自身缓存的DNS记录
或许很多人不知道,浏览器自身也带有一层DNS缓存。Chrome缓存1000条DNS解析结果,缓存时间大概在1分钟左右。

chrome浏览器输入:chrome://net-internals/#dns 打开DNS缓存页面,这个页面在之前版本的chrome浏览器中可以看到,但是目前已经看不到缓存的DNS记录

2.如果浏览器缓存中没有找到需要的记录或者记录已过期,则搜索hosts文件和操作系统缓存
在windows操作系统中,可以通过ipconfig/displaydns命令查看本机当前的缓存。
如图:
在这里插入图片描述
通过hosts文件,可以手动指定一个域名和其对应的IP解析结果,并且该结果一旦被使用,同样会被缓存到操作系统缓存中。

3.如果再hosts文件和操作系统缓存中没有找到需要的记录或者记录已过期,则向域名解析服务器发送解析请求。
当操作系统缓存中也没有命中的时候,系统就会向DNS服务器正式发出解析请求,这个是真正意义上开始解析一个位置的域名。
一般一台域名解析服务器会被地理位置临近的大量用户使用(特别是ISP的DNS),一般常见的域名解析都能在这里命中。

4.如果域名解析服务器也没有该域名的记录,那么就开始递归+迭代解析。

举个例子:https://mp.weixin.qq.com/?token=&lang=zh_CN

首先我们的域名解析服务器会向根域服务器(全球只有13台)发出请求,显然,凭借13台服务器不可能把全球所有的IP都记录下来。所以根域服务器记录的是com域服务器的IP, cn域服务器的IP, org域的服务器IP。。。如果我们要解析。com结尾的域名,我们可以到com域服务器去进一步解析,所以这部分的域名解析过程是一个树形的搜索过程。
如图:

在这里插入图片描述

根域服务器告诉我们com服务器IP
接着我们的域名解析服务器会向com服务器发出请求,根域服务器并没有mp.weixin.qq.com的IP,但是却有qq.com域服务器的IP。
接着我们的域服务器向qq.com域服务器发出请求。…
如此重复,直到获取mp.weixin.qq.com的IP地址

为什么是递归?问题由一开始的本机要解析mp.weixin.qq.com变成域名解析服务器要解析mp.weixin.qq.com,这个是递归。
为什么是迭代?问题由向根域名服务器发出请求变成向com域服务器发出请求,再变成向qq.com域发出请求,这个是迭代。

5.获取域名对应的IP之后,一步步向上返回,知道返回给浏览器。

2.1.2 发起TCP请求
浏览器会选择一个大于1024的本机端口向目标IP地址的80端口发起TCP请求。经过标准的tcp三次握手流程之后,建立TCP连接。
在这里插入图片描述
2.1.3 发起HTTP请求
其本质是在建立的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。

2.1.4 负载均衡

当一台服务器无法支持大量的用户访问时,将用户分摊到两个或者多个服务器上的方法叫做负载均衡。
Nginx : 是一款面向性能设计的HTTP服务器,占有内存少,稳定性高、

Nginx有4中类型的模块: core,handlers,filters,load-balances。
我们这里讨论的湿气重的2中,负责负载均衡的load-banlances 和负责执行一些列过滤操作的filters模块。

1.一般,如果我们平台配置了负载均衡的话,前一步DNS解析获得的IP地址应该是我们的Nginx负载均衡服务器的IP地址。所以,我们的浏览器将我们的网页请求发送到了Nginx负载均衡服务器上。
2.Nginx根据我们设定的分配算法和规则,选择一台后端的真是Web服务器,与之建立TCP连接,并转发我们浏览器发送过去的请求。

Nginx默认支持RR轮转法 和 ip_hash发这两种分配算法。
前者会从头到尾一个个轮训所有的web服务器,而后者则对源IP使用hash函数确定到底应该转发到那个web服务器上,也能保证同一个IP请求能发送到同一个web服务器上实现会话粘连。
也有其他的扩展分配算法:
fail:这种算法会选择响应时间最短的web服务器
url_hash:这种算法会使得相同的url发送到同一个web服务器

3.web服务器接收到请求,产生响应,并将网页发送给Nginx负载均衡服务器。
4.Nginx负载均衡服务器将页面场地给filters链处理,之后发回我们的浏览器。

在这里插入图片描述
filter的功能可以理解为先把前一步生成的结果处理一遍,再返回给浏览器,例如可以将前面没有压缩的网页用gzip压缩之后再返回给浏览器。

2.1.5浏览器渲染
1.浏览器根据页面内容,生成DOM Tree,根据CSS内容生成 CSS Rule Tree(规则树)。调用JS执行引擎执行JS代码
2.根据DOM Tree 和CSS Rule Tree生成Render Tree(呈现树)
3.根据Render Tree渲染网页

在浏览器解析页面内容的时候,会发现引用了其他未加载的image,css文件,js文件等静态内容。

2.2网页静态资源加载
例如登录淘宝的时候,打开F12,会发现:
在这里插入图片描述
这个url中有cdn字样。

什么是CDN? 如果我在广州访问淘宝,跨省的通信必然造成延迟,如果淘宝在广东建立一个服务器,静态资源我可以直接从就近的广东服务器获取,必然能提高整个网站的打开速度,这就叫做CDN。CDN叫做内容分发网络,是依靠部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高访问速度。

在这里插入图片描述
接下来的流程就是浏览器根据url加载改url下的图片内容等等。本质上是浏览器重新开始第一部分的流程。区别只是负责均衡服务器后端的服务器不在是应用服务器而是提供静态资源的服务器。

本文转载自
https://blog.csdn.net/dushan1234/article/details/98073575


http://chatgpt.dhexx.cn/article/xpKr5Bl9.shtml

相关文章

登录页面加载效果

说明:我们在做后台管理系统的时候,都会有一个登录页面,有的时候网速比较慢,登录速度比较慢,有的用户就会一直点登录按钮(图1),体验不是特别好,基于此,优化一下…

加载页面的几种方法

通常js中的方法是window.onload方法,但是,这有一个缺点,就是当出现多个加载事件时,后面的内容会直接覆盖前面的内容,譬如拿控制台输出为例子: window.onload function () {console.log("BOM方法1&quo…

js重新加载页面的方法

方法/步骤 1、window.location.reload(),刷新页面,不重复提交页面。 2、window.location.hrefwindow.location.href,刷新页面,不重复提交页面。 3、location location 4、location.replace(location.href),刷新页面,不重复…

页面加载的过程

1、创建Document对象,开始解析web页面。解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段document.readyState ‘loading’。 2、遇到link外部css,创建线程加载,并继续解析文档。 3、遇到script外部js&#xf…

HTML 页面加载过程

window.onload 和 DOMContentLoaded 的区别从输入 url 到得到 html 的过程浏览器渲染页面的过程 window.onload 和 DOMContentLoaded 的区别 DOMContentLoaded:DOM结构加载完毕window.onload:DOM结构和静态资源加载完毕 从输入 url 到得到 html 的过程 …

html运行页面一直处在加载状态的解决

前两天在制作一个页面的时候,发现左上方浏览器一直在加载,如下图所示: 并且我的一些图片也不显示了 查看代码,引用图片整合部分的图片路径出现错误: 改正如下: 重新运行界面: 界面运行完毕&am…

页面预加载

目录 一、<link> 标签预加载1、<link> 标签的 preload 属性的属性介绍2、避免滥用 preload3、避免混用 preload 和 prefetch&#xff08;1&#xff09;、preload&#xff08;2&#xff09;、prefetch 4、避免错用 preload 加载跨域资源5、defer 与 async 二、JavaS…

HTML页面的加载

HTML页面的加载实际上是基于http过程浏览器对数据的解析渲染。 http协议的请求过程是基于TCP协议的。http是要基于TCP连接基础上&#xff0c;简单的说&#xff0c;TCP单纯建立连接&#xff0c;不涉及任何我们需要请求的实际数据&#xff0c;简单的传输。http基于TCP建立的连接…

Redis集群原理详解

一、Redis集群介绍&#xff1a; 1、为什么需要Redis集群&#xff1f; 在讲Redis集群架构之前&#xff0c;我们先简单讲下Redis单实例的架构&#xff0c;从最开始的一主N从&#xff0c;到读写分离&#xff0c;再到Sentinel哨兵机制&#xff0c;单实例的Redis缓存足以应对大多数…

2022.4.7网页一直在加载中,无提示

项目场景&#xff1a; 项目中有一个查看一些数据的页面&#xff0c;点击“查看详情”按钮&#xff0c;可以进入这个页面&#xff0c;查看详情信息。 问题描述 点击“查看详情”按钮&#xff0c;页面一直在加载中&#xff0c;页面没有相关提示。 原因分析&#xff1a; 再次点…

softmax layer

一张图&#xff0c;简单易懂、清晰明了。

softmax中axis参数

从caffe中我们看到softmax有下面这些参数 // Message that stores parameters used by SoftmaxLayer, SoftmaxWithLossLayer message SoftmaxParameter {enum Engine {DEFAULT 0;CAFFE 1;CUDNN 2;}optional Engine engine 1 [default DEFAULT];// The axis along which t…

Softmax回归

softmax回归学习笔记&#xff1a; 分类问题&#xff1a; 假设数据集图像高和宽均为2像素&#xff0c;色彩为灰度。 例&#xff1a; 数据集真实标签&#xff1a; 狗 y1 猫 y2 鸡 y3 softmax回归模型&#xff1a; softmax回归和线性回归都需要将输入特征与权重做线性叠加。不同的…

softmax函数

输出层的设计 神经网络可以用在分类问题和回归问题上&#xff0c;不过需要根据情况改变输出层的激活函数。一般而言&#xff0c;回归问题用恒等函数&#xff0c;分类问题用softmax函数。机器学习的问题大致可以分为分类问题和回归问题。分类问题是数据属于哪一个类别的问题。比…

输出层的激活函数——softmax函数

概括 机器学习的问题大致可以分为分类问题和回归问题。分类问题是数据属于哪一个类别的问题。比如&#xff0c;区分图像中的人是男性还是女性的问题就是分类问题。而回归问题是根据某个输入预测一个&#xff08;连续的&#xff09;数值的问题。比如&#xff0c;根据一个人的图…

Softmax

又搬了个蒸馏相关~~ 神经网络中的蒸馏技术 “模型集成是一个相当有保证的方法&#xff0c;可以获得2%的准确性。“ —— Andrej Karpathy我绝对同意&#xff01;然而&#xff0c;部署重量级模型的集成在许多情况下并不总是可行的。有时&#xff0c;你的单个模型可能太大(例如G…

初探softmax

什么是softmax Softmax,又称作归一化指数函数。主要用于分类任务&#xff0c;降多分类的结果以概率的形式展现 下图展示softmax计算方法 softmax本质上是归一化网络&#xff0c;目的是将多个标量映射为一个概率分布,其输出的每一个值范围在&#xff08;0&#xff0c;1&#x…

神经网络之softmax(作用,工作原理【示例说明】,损失计算)

1、softmax作用 softmax将输出的分类结果映射到&#xff08;0-1&#xff09;之间&#xff0c;将神经网络的分类结果转化成对应的概率。不同的概率&#xff0c;表示此样本属于对应类别的可能性大小&#xff0c;概率越大&#xff0c;样本属于该分类的可能性越大。概率的总和为1。…

softmax算法详解

softmax简介 在机器学习尤其是深度学习中&#xff0c;softmax是个非常常用而且比较重要的函数&#xff0c;尤其在多分类的场景中使用广泛。他把一些输入映射为0-1之间的实数&#xff0c;并且归一化保证和为1&#xff0c;因此多分类的概率之和也刚好为1。 2.softmax函数的数学…

深度学习softmax函数理解

文章目录 一&#xff0c;引入二&#xff0c;softmax是什么&#xff1f;三&#xff0c;为什么 使用 e x e^x ex实现总结 一&#xff0c;引入 我们为什么要引入这个函数&#xff0c;我们知道在机器学习当中&#xff0c;一些问题大概可以分为两种&#xff0c;一种是分类问题&…