深度解析:从浏览器输入链接到页面展现的奇幻历程

〇、前言

当我们在浏览器中输入一个网址,例如:example.com,按下回车键后,会发生什么呢?

主要会发生以下这些过程:域名解析、建立HTTP连接、发送HTTP请求、数据传输、渲染网页、断开HTTP连接。

image

一、域名解析

URL 组成

  1. 协议(Scheme)
    可以用一个标签来表示,上面写着“协议:HTTP/HTTPS/FTP 等”。这个标签可以放在 URL 的最左边,用不同的颜色突出显示以区分其他部分。例如:“协议:https”。

  2. 主机(Host)
    用一个方框表示,里面写上主机名或 IP 地址,如“www.example.com”或“192.168.1.100”。这个方框紧跟在协议标签后面。例如:“协议:https” → “主机:www.example.com”。

  3. 端口(Port)
    如果有端口号,可以在主机方框后面用一个小括号括起来写上端口号,如“:8080”。如果是默认端口,可以不显示端口部分。例如:“协议:https” → “主机:www.example.com” → “端口::8080”(如果使用非默认端口)。

  4. 路径(Path)
    用一个向右的箭头表示路径的指向,后面跟着一个类似文件路径的描述,如“/articles/1234.html”。例如:“协议:https” → “主机:www.example.com” → “端口::8080” → “路径:/articles/1234.html”。

  5. 查询参数(Query Parameters)
    用一个“?”表示查询参数的开始,后面跟着一系列键值对,如“q=keyword&page=2”。例如:“协议:https” → “主机:www.example.com” → “端口::8080” → “路径:/articles/1234.html” → “查询参数:?q=keyword&page=2”。

  6. 片段标识符(Fragment Identifier)
    用一个“#”表示片段标识符的开始,后面跟着一个标识符,如“section3”。
    例如:“协议:https” → “主机:www.example.com” → “端口::8080” → “路径:/articles/1234.html” → “查询参数:?q=keyword&page=2” → “片段标识符:#section3”。

输入网址

用户在浏览器地址栏输入网址(例如:https://www.example.com)后,浏览器首先会检查自身的缓存。如果之前访问过该网址且相关域名信息仍在缓存有效期内,就可以直接获取域名对应的IP地址。

如果浏览器缓存中没有,会查询操作系统的hosts文件。这个文件可以手动配置域名和IP地址的映射关系,如果存在匹配项,就可以得到IP地址。

DNS查询(如果hosts文件中没有)

如果浏览器缓存和hosts文件都无法提供对应的IP地址,就会进行DNS(Domain Name System)查询。浏览器会向本地DNS服务器(通常由网络服务提供商提供)发送请求。

本地DNS服务器如果有该域名对应的IP地址缓存,就会直接返回给浏览器。如果没有,本地DNS服务器会向根域名服务器查询。根域名服务器根据请求中的顶级域名(如.com、.org等)指示本地DNS服务器向对应的顶级域名服务器查询。

顶级域名服务器再根据二级域名(如www)指示本地DNS服务器向负责该域名的权威DNS服务器查询,最终从权威DNS服务器获取到域名对应的IP地址,并将其缓存到本地DNS服务器以便后续查询,同时返回给浏览器。

DNS查询

根服务器

IPv4 根域名服务器共有 13 个逻辑根服务器(以 A - M 标识),它们由不同的组织运营。但实际上为了提高性能、可靠性和应对流量负载,每个逻辑根服务器可能有多个镜像站点分布在世界各地。这些根服务器主要由美国等发达国家的相关机构和组织管理运营,例如其中一些由美国的互联网名称与数字地址分配机构(ICANN)等进行管理。

IPv6 根域名服务器同样遵循 DNS 的分层解析架构。在全球范围内也有一定数量的根服务器分布。其分布和运营也注重可靠性和性能保障,以满足日益增长的 IPv6 网络应用需求。目前,很多 IPv4 根域名服务器的运营组织也在积极参与 IPv6 根域名服务器的建设和运营,同时也有更多国家和组织参与到 IPv6 根域名服务器相关的工作中来,以适应全球 IPv6 网络发展的趋势。

二、建立HTTP连接

TCP连接建立(基于HTTP协议)

浏览器得到IP地址后,根据网址中的协议(如HTTP或HTTPS),如果是HTTP协议,会使用TCP(Transmission Control Protocol)协议与目标服务器建立连接。这一过程遵循TCP的三次握手原则。

浏览器首先向服务器发送一个SYN(同步)包,包含一个随机生成的初始序列号。服务器收到后,回复一个SYN - ACK(同步 - 确认)包,其中包含服务器自己的初始序列号和对浏览器SYN包的确认号。最后,浏览器再发送一个ACK(确认)包给服务器,至此TCP连接建立成功。

TCP 三次握手

对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。

SSL/TLS握手(基于HTTPS协议)

如果是HTTPS协议,在TCP连接建立之后,还需要进行SSL/TLS(Secure Sockets Layer/Transport Layer Security)握手。这一过程用于在浏览器和服务器之间建立加密通道,确保数据传输的安全性。

浏览器向服务器发送客户端Hello消息,包含支持的SSL/TLS版本、加密算法等信息。服务器根据自身支持情况回复服务器Hello消息,确定使用的SSL/TLS版本和加密算法,并发送服务器证书给浏览器。浏览器验证服务器证书的有效性,然后生成一个随机的主密钥,并使用服务器证书中的公钥进行加密发送给服务器。服务器使用自己的私钥解密得到主密钥,之后双方使用主密钥生成会话密钥,用于后续的数据加密和解密。

三、发送HTTP请求

连接建立后,浏览器根据用户的操作(如访问网页、提交表单等)向服务器发送HTTP请求。请求包含请求方法(如GET、POST等)、请求路径(如/index.html)、HTTP版本以及请求头(包含浏览器类型、接受的内容类型等信息)和可能的请求体(如POST请求中的表单数据)。

服务器接收到请求后,根据请求的内容进行处理。例如,如果是请求一个网页文件,服务器会查找对应的文件资源。如果请求需要查询数据库,服务器会与数据库进行交互获取相关数据。

服务器处理完请求后,向浏览器发送HTTP响应。响应包含HTTP版本、状态码(如200表示成功、404表示未找到资源等)、响应头(包含服务器类型、内容类型、内容长度等信息)和响应体(如网页的HTML内容)。

常见HTTP状态码

状态码范围状态码含义
1xx - 信息性状态码100 Continue客户端可继续发送请求。
1xx - 信息性状态码101 Switching Protocols服务器切换协议。
2xx - 成功状态码200 OK请求成功,返回资源。
2xx - 成功状态码201 Created创建新资源成功。
2xx - 成功状态码204 No Content请求成功但无内容返回。
3xx - 重定向状态码301 Moved Permanently资源永久移动。
3xx - 重定向状态码302 Found资源临时移动。
3xx - 重定向状态码304 Not Modified资源未修改,使用缓存。
4xx - 客户端错误状态码400 Bad Request请求有语法错误。
4xx - 客户端错误状态码401 Unauthorized未认证。
4xx - 客户端错误状态码403 Forbidden已认证但无权限。
4xx - 客户端错误状态码404 Not Found资源未找到。
5xx - 服务器错误状态码500 Internal Server Error服务器内部错误。
5xx - 服务器错误状态码502 Bad Gateway网关错误。
5xx - 服务器错误状态码503 Service Unavailable服务不可用。
5xx - 服务器错误状态码504 Gateway Time-out网关超时。

四、网页渲染

浏览器收到响应后,开始解析HTML(HyperText Markup Language)内容。浏览器根据HTML标签构建DOM(Document Object Model)树,将HTML文档中的各个元素表示为DOM节点,如<html>是根节点,<body><head>等是其子节点,每个节点包含标签名、属性和子节点等信息。

在解析HTML的过程中,如果遇到外部资源的引用,如<link>标签引用的CSS(Cascading Style Sheets)文件、<script>标签引用的JavaScript文件、<img>标签引用的图片等,浏览器会再次发起请求去获取这些资源。

浏览器根据DOM树和加载的CSS文件构建CSSOM(CSS Object Model)树,然后将DOM树和CSSOM树合并成渲染树(Render Tree)。渲染树只包含需要显示的节点(例如,<head>中的一些元素可能不需要显示,不会包含在渲染树中)。

浏览器根据渲染树进行布局(Layout),确定每个节点在页面中的位置和大小。最后,浏览器进行绘制(Paint)操作,将各个节点绘制到屏幕上,显示出网页内容。

五、断开HTTP连接

image

对于4次挥手,其实你仔细看是2次,因为TCP是全双工的,所以,发送方和接收方都需要Fin和Ack。只不过,有一方是被动的,所以看上去就成了所谓的4次挥手。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。

资料

  • 《计算机网络:自顶向下方法》
  • https://developer.mozilla.org/zh-CN/
  • https://xiaolincoding.com/
  • https://mp.weixin.qq.com/s/o1Atz2uJtcsSmsVPNK9kVA
  • https://root-servers.org/
  • https://coolshell.cn

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

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

相关文章

dfs +剪枝sudoku———poj2676

目录 前言 lowbit函数 数独 suduku 问题描述 输入 输出 问题分析 子网格位置 优化搜索顺序剪枝1 优化搜索顺序剪枝2 可行性剪枝 代码 前言 lowbit函数 这是一个利用二进制位运算取出二进制数最后一位’1‘的函数 数独 数独大家肯定都玩过&#xff0c;…

Vue/组件的生命周期

这篇文章借鉴了coderwhy大佬的Vue生命周期 在Vue实例化或者创建组件的过程中 内部涉及到一系列复杂的阶段 每一个阶段的前后时机都可能对应一个钩子函数 以下是我根据coderwhy大佬文章对于每一个阶段的一些看法 1.过程一 首先实例化Vue或者组件 在实例化之前 会对应一个钩子函…

Internet Download Manager6.42免费版下载神器新体验

&#x1f680; 开篇就燃&#xff01;你的下载速度被“TA”承包了 #### &#x1f31f; 初识IDM 6.42&#xff0c;下载界的“超跑”驾到 各位追求效率的小伙伴们&#xff0c;今天小红要来揭秘一款让我彻底告别“龟速”下载的神器——Internet Download Manager (简称IDM) 6.42版&…

threejs-基础材质设置

一、介绍 主要内容&#xff1a;基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图) 主要属性&#xff1a; side: three.DoubleSide, //设置双面 color: 0xffffff, //颜色 map: texture, //纹理 transparent: true, // 透明度 aoMap: aoTexture, //ao贴图 aoMapIntensity: 1…

商标恶意维权形式及应对策略

在商业领域&#xff0c;商标恶意维权的现象时有出现&#xff0c;给正常的市场秩序和企业经营带来了不良影响。以下将介绍其常见形式及应对方法。 一、商标恶意维权的形式1、囤积商标后恶意诉讼。一些人或企业大量注册与知名品牌相似或具有一定通用性的商标&#xff0c;并非用于…

『网络游戏』服务器向客户端分发消息【21】

新建缓存层文件夹 创建脚本&#xff1a;CacheSvc 编写服务器脚本&#xff1a;CacheSvc 修改服务器脚本&#xff1a;LoginSys.cs 修改服务器脚本&#xff1a;PEProtocol.cs 服务器编写完成 - 测试运行服务端 修改客户端脚本&#xff1a;NetSvc.cs 修改客户端脚本&#xff1a;Cli…

R语言绘制散点图

散点图是一种在直角坐标系中用数据点直观呈现两个变量之间关系、可检测异常值并探索数据分布的可视化图表。它是一种常用的数据可视化工具&#xff0c;我们通过不同的参数调整和包的使用&#xff0c;可以创建出满足各种需求的散点图。 常用绘制散点图的函数有plot()函数和ggpl…

ModBus Pull的详细安装教程

目录 一.导航 二 .安装 三.激活 四.使用 一.导航 modbus poll 和 modbus slave 是两种Modbus协议的软件工具 。 Modbus Poll&#xff1a;Modbus Poll 是一个客户端&#xff08;或主站&#xff09;软件&#xff0c;它允许用户与支持Modbus协议的设备进行通信。 Modbus Sla…

基于SPI的flash读写操作

1、实验目标 使用页写或连续写操作向Flash芯片写入数据&#xff0c;再使用数据读操作读取之前写入数据&#xff0c;将读取的数据使用串口传回PC机&#xff0c;使用串口助手传回数据并与之前写入数据比较&#xff0c;判断正误。 注意&#xff1a;在向Flash芯片写入数据之前&…

计算机毕业设计 Python医疗预约与诊断系统的设计与实现 Python毕业设计 Python毕业设计选题 Django Vue【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【开源项目】Jsoncpp的简单使用

Jsoncpp是一个开源项目&#xff0c;它是一个用于处理JSON&#xff08;JavaScript Object Notation&#xff09;数据的C库。它支持将C结构化的数据转化为JSON字符串&#xff0c;也支持将JSON字符串转化为结构化数据 JSON&#xff08;JavaScript Object Notation&#xff09;数据…

基于springboot的大学生体质测试管理系统(含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的大学生体质测试管理系统1拥有三种角色 管理员&#xff1a;学生管理、教师管理、日常运行管理、运动分析管理、成绩管理、论坛管理、轮播图管理等 教师&#xff1a;登录…

C++AVL树详解

什么是AVL树 AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的⼆叉搜索树&#xff1a;它的 左右⼦树都是AV树&#xff0c;且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树&#xff0c; 通过控制⾼度差去控制平衡…

算法-依据先序遍历和中序遍历构建二叉树

简单的二叉树遍历算法&#xff0c; 为了通过给定的先序遍历&#xff08;preorder&#xff09;和中序遍历&#xff08;inorder&#xff09;数组构造二叉树&#xff0c;我们需要理解这两种遍历方式的特点&#xff1a; 先序遍历&#xff08;Preorder&#xff09;&#xff1a;首先…

网站集群批量管理-Ansible(playbook)

1.剧本概述 1. playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 2. 剧本yaml格式,yaml格式的文件:空格,冒号 2. 区别 ans-playbookans ad-hoc共同点批量管理,使用模块批量管理,使用模块区别重复调用不是很方便,不容易重复场景部署服务…

网关在不同行业自动化生产线的应用

网关在不同行业自动化生产线的应用&#xff0c;展示了其作为信息与物理世界交汇点的广泛影响力&#xff0c;尤其在推动行业智能化、自动化方面发挥了不可估量的作用。以下是网关技术在污水处理、智慧农业、智慧工厂、电力改造及自动化控制等领域的深入应用剖析。 1. 污水处理 …

java方法对象案例

完成电影信息展示功能&#xff1b;根据电影id查询该电影的详细 主方法&#xff1a; package Y; import java.util.Scanner; public class 模仿电影系统main { //目标&#xff1a;完成电影信息展示功能&#xff1b;根据电影id查询该电影的详细 //电影数据// 1,"水门桥&q…

超级智能“试衣镜”!GarDiff:高保真保持目标人物特征和服装细节,虚拟试穿技术新SOTA!

今天给大家介绍一个最新的虚拟试穿技术GarDiff&#xff0c;它可以分析你想穿的衣服和你的照片并提取出衣服的颜色、纹理和形状等细节。然后通过一个特殊的“对比器”来确保衣服与您的身体形状完美契合。这个对比器会使用两种不同的“眼睛”&#xff1a;一种是可以看到整体外观的…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

【华为HCIP实战课程七】OSPF邻居关系排错MTU问题,网络工程师

一、MTU MUT默认1500,最大传输单元,一致性检测 [R3-GigabitEthernet0/0/1]mtu 1503//更改R3的MTU为1503 查看R3和SW1之间的OSPF邻居关系正常: 默认华为设备没有开启MTU一致性检测! [R3-GigabitEthernet0/0/1]ospf mtu-enable //手动开启MTU检测 [SW1-Vlanif30]ospf mtu…