web前端之浏览器从输入URL到页面展示的过程、建立TCP连接与三次握手、发送HTTP请求、DNS解析、地址、渲染

MENU

  • 前言
  • DNS解析
  • 建立TCP连接
  • 发送HTTP请求
  • 服务器处理请求
  • 接收HTTP响应
  • 解析HTML
  • 解析CSS
  • 渲染页面
  • 结束


前言

浏览器从输入URL到页面展示的过程,这是一件看似简单却又十分复杂的事情。我们每天都在使用浏览器,却很少关注它们背后的工作原理。本文将从多个方面深入探讨浏览器从输入URL到页面展示的完整过程。


DNS解析

当我们在浏览器中输入URL时,浏览器会向DNS服务器发送请求,查询该URL所对应的IP地址。
DNS解析的过程可以分为递归查询和迭代查询两种方式。
1、递归查询是指DNS服务器不断地向上级服务器发起请求,直到找到该URL对应的IP地址;
2、迭代查询是指DNS服务器直接向根服务器发起请求,并且从返回的响应中获取下一级服务器的地址,不断向下一级服务器发起请求,直到找到该URL对应的IP地址。


建立TCP连接

DNS解析完成后,浏览器会根据获取到的IP地址,向该IP地址对应的服务器发送TCP连接请求。
TCP连接的建立过程可以分为三次握手。
1、第一次握手:客户端向服务器发送连接请求,并且发送一个随机数作为起始序列号。
2、第二次握手:服务器收到连接请求后,向客户端回复一个确认消息,并且发送一个随机数作为回复序列号。
3、第三次握手:客户端收到服务器的确认消息后,再次向服务器发送确认消息。
TCP三次握手是为了确认客户端和服务端的发送和接收的能力。


发送HTTP请求

TCP连接建立完成后,浏览器会向服务器发送HTTP请求。
HTTP请求的格式一般包括请求方法、请求URL、请求头部和请求体。
请求方法通常有GET、POST、PUT等,常用的是GET和POST。
请求头部包括一些额外的信息,例如浏览器类型、Cookie信息等。请求体则包含客户端提交的数据,例如表单数据、上传的文件等。


服务器处理请求

服务器接收到HTTP请求后,会根据请求的URL和请求方法,执行相应的操作。
常见的操作包括从数据库中查询数据、生成HTML页面等。
服务器处理完成后,会向客户端发送HTTP响应。


接收HTTP响应

浏览器接收到服务器的HTTP响应后,会根据响应头部中的状态码来判断请求是否成功。
如果请求成功,浏览器会根据响应头部中的Content-Type字段来确定响应体的内容类型。
如果是HTML页面,浏览器会将响应体解析成DOM树,并且根据CSS样式对页面进行渲染。


解析HTML

浏览器在渲染页面前,会先将HTML代码解析成DOM树。
DOM树是一种以层次结构组织的节点树,每个节点代表HTML中的一个元素或文本。
浏览器解析HTML代码的过程可以分为标记化和构建DOM树两个阶段。
1、标记化是指将HTML代码分解成多个标记,并且将它们分类为开始标记、结束标记、注释等不同类型。
2、构建DOM树则是将标记化后的HTML代码转换成DOM节点,并且将它们按照层次结构组织起来。


解析CSS

解析HTML完成后,浏览器会解析CSS代码,为每个元素计算出最终的样式。
CSS解析的过程可以分为分词、解析和计算三个阶段。
1、分词是指将CSS代码分解成多个不同的词汇,例如选择器、属性名、属性值等。
2、解析则是将分词后的CSS代码转换成CSS对象模型(CSSOM),并且将它们按照层次结构组织起来。
3、计算则是为每个元素计算出最终的样式,并且将它们应用到DOM树上。


渲染页面

将DOM树和样式应用到页面上进行渲染。
浏览器会根据DOM树和样式来计算每个元素的位置和大小,并且将它们绘制到屏幕上。
渲染页面的过程可以分为生成布局、生成绘制列表和绘制三个阶段。
1、生成布局是指根据DOM树和样式计算出每个元素的位置和大小。
2、生成绘制列表则是将每个元素的绘制操作记录下来。
3、绘制则是将记录下来的绘制操作应用到页面上进行绘制。


结束

以上就是浏览器从输入URL到页面展示的完整过程。每个步骤都有其独特的功能和作用,只有在这些步骤都完成后,才能让我们看到一个完整的网页。对于前端开发人员来说,了解这些细节非常重要,可以帮助他们更好地优化网页性能和排查问题。
以上只是大概的过程,深入了解请点击链接。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin/Android中执行网络请求

方式一:使用okhttp3 okhttp官网 okhttp3 github地址 打开build.gradle.kts文件加入依赖 dependencies {implementation("com.squareup.okhttp3:okhttp:4.9.0") }在IDEA的Gradle面板点击reload按钮便会自动下载jar 使用网络请求时需要把网络的权限打开&a…

java必知必会-jsp

文章目录 一、什么是JSP?二、jsp运行原理三、文档结构四、jsp基本语法五、jsp9大内置对象(笔试)六、el(${el表达式}):Expression Language七、11个内置对象(自定义的数据必须放在域中el才能得到)八、jstl(jsp Standard Tag Library)总结 一、…

12.【C语言】创建函数

1.先创建函数(一劳永逸) Add函数VS2022中不是自带的,需要创建 int Add(int x, int y) {int z 0;z x y;return z; } 2.函数的调用:函数名(x,y) int sum Add(num1, num2); 完整代码 #de…

Nuxt3 的生命周期和钩子函数(十一)

title: Nuxt3 的生命周期和钩子函数(十一) date: 2024/7/5 updated: 2024/7/5 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt3中几个关键的生命周期钩子和它们的使用方法,包括webpack:done用于Webpack编译完成后执行操作…

pytorch-时间序列

目录 1. 时间序列2. word embedding2.1 one hot2.2 word2vec2.3 GloVe 1. 时间序列 具有时间相关性的序列叫做时间序列,比如:语音、文本句子 2. word embedding 2.1 one hot 针对句子来说,可以用[seq_len, vector_len] 有多少个单词vecto…

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024)

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024) 会议简介 2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024)是一次重要的学术盛会,将在中国厦门举行。会议的主要目的是为全球的电子通信和计算机科学技术领域的专家、…

数字信号处理实验二(模拟信号采样与重构及频谱分析FFT)

模拟信号采样与重构及频谱分析FFT(2学时) 要求: 对一模拟信号进行采样;对该采样信号进行重构;分析它们的频谱特征。目的: 熟悉MATLAB命令和编辑、运行、调试环境;掌握采样定理及对信号的频谱分析…

将 build.gradle 配置从 Groovy 迁移到 Kotlin

目录 时间轴 常用术语 脚本文件命名 转换语法 为方法调用添加圆括号 为分配调用添加 转换字符串 重命名文件扩展名 将 def 替换为 val 或 var 为布尔值属性添加 is 前缀 转换列表和映射 配置 build 类型 从 buildscript 迁移到插件块 查找插件 ID 执行重构 转…

git 提交后发现有问题重改的正确方法

撤回上一次提交: git reset --soft HEAD^ 修改文件(如果需要)。 暂存修改后的文件: git add . 重新提交: git commit -m "新的提交信息" 强制推送到远程仓库:注意--force git push --force

简过网:考教师编制报培训班有用吗?

​ 很多想要备考教师编的朋友都会有一个疑问,那就是备考教师编报培训班有用吗? 其实,主要还是要看你是笔试和面试。 小编觉得如果是笔试的话,其实都是教育理论的东西,线下班其实没有太大的必要,第一是面授…

DFS之搜索顺序——AcWing 1116. 马走日

DFS之搜索顺序 定义 DFS之搜索顺序是指在执行深度优先搜索时,遍历图或树中节点的策略。具体而言,DFS会沿着一条路径深入到底,当无法继续深入时回溯,然后选择另一条未探索的路径继续深入。搜索顺序直接影响到搜索效率和剪枝的可能…

发现CPU占用过高,该如何排查解决?

1.使用top命令 查看cpu占用最多的进程 2.使用 top -H -p pid 发现有两个线程占用比较大 3.将线程id转换为16进制 使用命令 printf 0x%x\n pid 4.使用 jstack pid | grep 线程id(16进制) -A 20 (显示20行) 根据代码显示进行错误排查

软设之UML状态图

UML状态图 状态图描述一个动态机,它由状态,转移,事件和活动组成。状态图给出了对象的动态视图。它对于接口,类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模 状态…

电脑为什么会提示丢失msvcp140.dll?怎么修复msvcp140.dll文件会靠谱点

电脑为什么会提示丢失msvcp140.dll?其实只要你的msvcp140.dll文件一损坏,然而你的电脑程序需要运用到这个msvcp140.dll文件的时候,就回提示你丢失了msvcp140.dll文件!因为没有这个文件,你的很多程序都用不了的。今天我…

无人机对地面运动目标定位---获取目标的移动方向和速度

目录 一、引子 我们利用单目无人机通过等时间间隔拍照的形式对地面某移动目标进行定位,当前,我们已经获得了每张相片上该目标的三维坐标,并且知道该无人机在飞行过程中拍照的时间间隔,那么我们就可以通过一定的计算,得…

溶酶体靶向嵌合体制备方法和技术

网盘 https://pan.baidu.com/s/1dhCCryatp71j7yXTDdrrTw?pwdynr4 具有聚集诱导发光性质的比率型溶酶体pH探针及应用.pdf 内体-溶酶体转运靶向嵌合体降解剂及其制备方法与应用.pdf 可降解PDGFR-β的蛋白降解靶向嵌合体及其制备方法和应用.pdf 溶酶体膜包覆纳米颗粒的制备方法.…

JDK-SPI-服务提供者接口

归档 GitHub: JDK-SPI-服务提供者接口 SPI 源码说明 java.util.ServiceLoader /*** 服务加载器&#xff1a;给定接口&#xff0c;查找实现类。实现可迭代接口 */ public final class ServiceLoader<S> implements Iterable<S> {/*** 返回 ServiceLoader 实例 *…

Apng文件判断

背景&#xff1a;在图片压缩中&#xff0c;根据文件头判断png和jpg文件进行了压缩&#xff0c;但是对apng文件&#xff0c;文件头的前14个字节都一样&#xff08;89504E470D0A1A0A0000000D4948&#xff09;&#xff0c;导致对apng图片进行压缩&#xff0c;图片白了 解决方法&am…

springboot升级到2.7.17后,quartz集群模式配置修改

项目升级&#xff0c;sprringboot版本由2.1.3.RELEASE升级到2.7.17&#xff0c;quartz集群模式下报了一些错&#xff0c;下面是修改方案。 报错1&#xff1a;Unable to detect database type 我使用的是达梦数据库&#xff0c;在没有升级前&#xff0c;是可以正常运行的&#…

剪画小程序:自媒体工具推荐:视频文案提取!

各位小伙伴&#xff0c;你们好啊&#xff01; 上周五观看《歌手 2024》第八期时&#xff0c;我再次被何炅老师幽默风趣的主持风格所折服。他的每一句话都仿佛带着魔力&#xff0c;让现场气氛热烈非凡&#xff0c;实在令人羡慕不已&#xff01; 何炅老师的口才之所以如此出色&a…