浏览器输入www.baidu.com后执行的全部过程

news2025/7/18 16:46:10

日升时奋斗,日落时自省 

<1>URL输入

URL称为 : 统一资源定位符,用于定位互联网上的资源,也就是平常提起的"网址"

地址栏输入网址之后按下回车,浏览器会对输入的信息进行评判

(1)检查输入的内容是否是是一个合法的网址连接(非法地址不行)

(2)合法的情况下 : 再次判断网址是否完整,如果不完整,浏览器会进行在本有的网址上进行猜测补全地址的前缀或者后缀;最终浏览器接收到的网址:www.baidu.com;

(3)不合法 : 将输入内容作为搜索条件 ,  直接当做默认搜索引擎进行搜索

<2>DNS域名解析IP地址

浏览器不是直接通过域名来找对应服务器的IP地址的 , 所以使用DNS解析浏览器发送来的请求解析的网址的IP地址

根据七层网络协议 (了解): 浏览器和服务器都可以看做是 应用层的一个应用

实际上就是一个应用层到另一个应用层的过程,该过程一般使用的是HTTP协议进行

 HTTP协议底层的TCP/IP协议,需要用IP地址建立连接.浏览器直接接收的是网址,针对的域名是需要找到对应IP地址的

第一步 : 用户在浏览器中输入域名操作系统会检查浏览器缓存和本地的hosts文件中,是否有这个网址记录,如果有的话就从记录里面找到对应的IP地址,完成域名解析 

第二步 : 如果第一步中没有的话,接下来使用TCP/IP参数中设置的DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源,则返回解析结果,完成域名解析

第三步 : 第二步也没有完成解析的情况下: 检查本地DNS服务器是否缓存有该网址记录,有的话就返回解析结果 , 完成域名解析

第四步 : 本地服务器也没有找到的话,再发送到查询报文到根DNS服务器,根DNS服务器收到请求好后 , 返回顶级域DNS服务器地址, 之后本地DNS服务器发送查询报文到顶级域DNS服务器;顶级域DNS服务器收到请求后,返回权威DNS服务器地址,本地DNS服务器再发送查询报文到权威DNS服务器,权威DNS服务器收到请求后,最终返返回IP地址,完成域名解析

<3>建立TCP连接(三次握手)

当浏览器获取到服务器的IP地址后,浏览器就会用一个随机的端口号向像服务器80端口发起TCP连接请求,该连接请求抵达服务器端后,开始建立连接 TCP 三次握手

 针对三次握手(简单叙述):

TCP 连接 客户端 与 服务器 交互需要3个数据报(上图中的 SYN  (SYN+ACK)  ACK) ; 三次握手的目的就是为了确认双方的接收和发送能力是否正常 , 初始序列号,窗口大小等(详细TCP解析)

第一次握手 : 客户端发送 SYN 报文段 ,并进入 SYN + ACK 状态 , 等待服务器的确认

第二次握手 : 服务器收到SYN报文段 需要给客户端发送ACK 同时也需要发送一个SYN报文,所以也就是向客户端发送 SYN + ACK

第三次握手 : 客户端接收到了SYN + ACK 报文 向服务器发送确认包,客户端进入等待状态,等待服务器收到客户端ACK包也会进入

<4>发送HTTP/HTTPS请求

服务器接收到请求,根据报头中的content -type 的值来判处理请求的数据

HTTPS  :  会在TCP与HTTP之间多添加一层协议做为加密及鉴别服务,HTTPS使用SSL协议和TLS协议,保证了信息的安全

TLS协议 :用于在两个通信应用程序之间提供保密性和数据完整性。TLS协议由两层组成:TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)

当浏览器到web服务器的连接建立后,浏览器会发送一个初始的HTTP GET请求, 目标通常是一个HTML文件,服务器收到请求以后,将发回一个HTTP响应报文,内容包括相关响应头 和 HTML正文

HTTP响应报文 包含了 状态行 、响应头部 、空行 和 响应包体组成

状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF

HTTP-Version:表示服务器HTTP协议的版本(一般是HTTP /1.1 )
Status-Code:表示服务器发回的响应状态代码(十进制数字1,以代码的形式表示服务器对请求的处理结果)
Reason-Phrase:表示状态代码的文本描述,简单的文字描述(例如 Not Found),也可以自定义,早期兼容文本客户端,当前使用较少
CRLF:回车符+换行符

注:此处提到的是状态码,状态码不是只能判断错误,我们最常见网页资源不存在的时候会出现404 Not Found ,同时还有其他的状态都是状态代码描述的

状态代码解析 :

HTTP响应报文状态行中的状态代码由三位数字组成,第一个数组定义了响应的类别 ,共有五中可能取值:

1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

<5>浏览器解释渲染页面

浏览器接收到响应以后,根据响应类型判断出后面的数据应该是HTML文档格式,

不同浏览器引擎渲染过程都不太一样,我以谷歌浏览器为例来介绍一下渲染过程

第一步 :处理HTML标记并构建DOM树 

第二步 : 处理CSS标记并构建CSSOM树 

第三步 :将DOM树与CSSOM树合并成一个渲染树

第四步 :浏览器根据渲染树把页面绘制到屏幕上

<6>HTTP请求结束,断开TCP连接

针对长链接和短链接分别概括性指的是 两个版本http1.0 和 http1.1的区别;

在HTTP/1.0规定默认使用的是短连接(浏览器与服务器值保持短暂的连接);浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

 HTTP/1.1规定默认使用长连接,数据传输完成了保持TCP连接不断开(不发送RST包、不不四次挥手),用以保持连接特性。使用长连接的HTTP协议,在同一个TCP的连接中可以传送多个HTTP请求和响应(多个请求和响应可以重叠,多个请求和响应可以同时进行),会在响应头有加入这行代码:Connection:keep-alive

TCP断开连接:四次挥手释放(TCP详细版)

 四次挥手(简单叙述):

执行四次交互

第一次 :发送FIN报文 ,服务器接收同时返回ACK,此时服务器知道 自己能接收成功

第二次:客户端接收到服务器返回的ACK,客户端知道了自己发送的数据能被接收(自己能发送数据成功)

第三次:服务器发送FIN, 证明服务器发送功能没有问题

第四次:客户端接收FIN后,返回ACK,告诉服务器能够它能够发送成功

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

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

相关文章

【spring教程】3.IoC容器概述

IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的实…

【数据结构】二叉树的原理及实现

1.什么是数&#xff1f; 树这种数据结构在计算机中是非常重要的&#xff0c;是一种非线性数据结构。一些数据库的底层与快速索引都离不开树这种数据结构。树是有很多节点组成的具有一定层次关系的集合。最上面的可以看成是树的头&#xff0c;下面的很多节点就在这个头的基础上…

前端如何实现局部滚动效果?

一、基础版局部滚动 重点在于给需要滚动的区域加上 overflow: auto; 属性 废话不多说&#xff0c;先上基础版的局部滚动代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv…

智能优化算法——遗传算法(GA)(纯理论,不包含代码)

今天接着PSO&#xff0c;记录一下遗传算法的实现原理。&#xff08;若有错误&#xff0c;请大佬帮忙指正&#xff01;&#xff09;&#xff08;同样&#xff0c;主要参考b站视频学习加入自己的一些理解&#xff0c;如果想要看视频学习&#xff0c;可以直接移步最后参考链接&…

深度学习引言

动手学深度学习pytorch版-笔记原文链接日常生活中的机器学习机器学习中的关键组件数据模型目标函数优化算法各种机器学习问题监督学习回归分类标记问题搜索推荐系统序列学习无监督学习与环境互动强化学习特点小结原文链接 动手学深度学习pytorch中文版 日常生活中的机器学习 …

可怕,chatGPT用3小时教会我数据分析

chatGPT这玩意真的是我的救星,用它作为我的Python教练,我用三个小时学会了数据处理(Pandas)和绘图(matplotlib)。 这两个库的学习,在之前已经困扰了我7个月。之前卡壳的原因,是我一直没有耐心从零开始,按照教材设置的教程去学习Python——我擅长在项目中学习,一点一点…

Android实现炫酷跳动的闪屏LOGO

前言&#xff1a;在日常开发中&#xff0c;经常会遇到各种视觉效果&#xff0c;有的效果可能一眼看去会让人觉得很复杂&#xff0c;但是我们必须明确一点&#xff1a;所有复杂动效都是可以分解成单一的基础动作&#xff0c;比如缩放&#xff0c;平移&#xff0c;旋转这些基础单…

最新BlackArch发布,提供1400款渗透测试工具

近日&#xff0c;BlackArch Linux新版本发布&#xff0c;此版本为白帽子和安全研究人员提供了大约1400款渗透测试工具&#xff0c;如果你是一位白帽子或者安全研究人员&#xff0c;这个消息无疑会让你很感兴趣。BlackArch Linux是一款基于Arch Linux的发行版&#xff0c;主要面…

luckysheet的使用——07.二次开发自动插入批注功能

在单元格编辑完成后&#xff0c;需要自动在这个单元格上新增批注&#xff0c;此时需要改造旧代码&#xff0c;首先找到路径为 src/controllers/postil.js的文件&#xff0c;找到新增批注时触发的方法&#xff0c;如下&#xff1a; 2.对方法进行改造&#xff0c;新增传入变量co…

深入探讨下,IPC产品与智能家居融合的无限开创性

IPC还有哪些新玩法&#xff1f;随着摄像头的应用场景增加&#xff0c;IPC作为一种能力&#xff0c;正在融入到越来越多的智能设备中&#xff0c;形成了一批富有创意的智能 IPC 融合类产品。 比如&#xff0c;扫地机结合智能 IPC 后&#xff0c;能实现可视化精准识别障碍物&…

C++实现日期类

文章目录前言1.日期类的功能分析1.大致分析2.接口设计2.具体实现1.日期类的成员函数和成员变量2.初始化(构造函数&#xff09;3.对日期进行天数推算4.比较相关的运算符重载5.前置后置自增或自减6.日期相减与流插入流提取1.日期相减2.重载流插入和流提取3.总结前言 之前介绍了C…

数据结构与算法—链表list

目录 链表 链表类型 链表插入 链表删除 写程序注意点 与数组区别 链表应用 LRU 实现思想 链表 链表&#xff0c;一种提高数据读取性能的技术&#xff0c;在硬件设计、软件开发中有广泛应用。常见CPU缓存&#xff0c;数据库缓存&#xff0c;浏览器缓存等。缓存满时&#…

mongoDB5以上实现单机事务

原理就是因为目前mongodb只有副本&#xff0c;分片支持事务。我们就让单机变成单节点副本&#xff0c;同时又是主节点&#xff0c;可以读写一、修改bin目录下的mongod.cfg新增配置replication:replSetName: rs0二、重启mongodb服务、初始化&#xff08;这是windows下的启动命令…

2月24日作业

题目&#xff1a;通过操作Cortex-A7核&#xff0c;串口输入相应的命令&#xff0c;控制LED灯进行工作--->上传CSDN 1.例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led…

day20_Map

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、比较器排序 三、Collections 四、Map 五、HashMap 六、TreeMap 零、 复习昨日 HashSet 不允许重复元素,无序 HashSet去重原理: 先比较hashco…

Java知识复习(二)Java集合

1、List、Set和Map的区别 List&#xff1a;存储的顺序是有序的、可重复的Set&#xff1a;存储的顺序是无序的、不可重复的Map&#xff1a;使用键值对存储&#xff0c;Key和Value都是无序的&#xff0c;其中Key不可重复&#xff0c;而Value可重复 2、ArrayList和LinkedList的区…

node报错

记录bug:运行 npx -p storybook/cli sb init 时报错gyp info spawn C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exegyp info spawn args [gyp info spawn args build/binding.sln,gyp info spawn args /nologo,gyp info spawn args…

OpenCV只含基本图像模块编译

编译OpenCV4.5.5只含基本图像模块&#xff0c;环境为Windows10 x64CMake3.23.3VS2019。默认编译选项编译得到的OpenCV库往往大几百MB甚至上GB&#xff0c;本文配置下编译得到的库压缩后得到的zip包大小仅6.25MB&#xff0c;适合使用OpenCV基本图像功能模块的项目移植而不牵涉其…

电子技术——伯德图与反馈

电子技术——伯德图与反馈 增益和相位边距 从上两节我们知道环路增益 AβA\betaAβ 可以决定一个系统的稳定性&#xff0c;一个更加简单和有效的方法是我们可以绘制 AβA\betaAβ 的伯德图&#xff08;因为相位可以达到360度&#xff0c;因此这是一个四阶响应系统&#xff09;…

行锁、表锁、主键外键、表之间的关联关系

Java知识点总结&#xff1a;想看的可以从这里进入 目录2.4、行锁、表锁2.5、主键、外键2.5.1、主键2.5.2、外键2.6、表的关联关系2.4、行锁、表锁 MyISAM默认采用表级锁&#xff0c;InnoDB默认采用行级锁。 表锁&#xff1a;开销小&#xff0c;加锁快&#xff0c;不会出现死锁…