当前位置: 首页 > news >正文

从DNS到TCP:DNS解析流程和浏览器输入域名访问流程

1 DNS 解析流程

1.1 什么是DNS域名解析

        在生活中我们会经常遇到域名,比如说CSDN的域名www.csdn.net,百度的域名www.baidu.com,我们也会碰到IP,现在目前有的是IPV4,IPV6。那这两个有什么区别呢?IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网的计算机都需要通过IP地址来互相联系和分别。

        但是由于IP地址是由一串容易混淆且很难记忆的数字串构成,这对我我们日常生活访问不同网站是很困难的。基于此,人们在IP地址的基础上又发展出了一种更容易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址来说更加容易被识别和记忆,逐渐替代IP地址成为互联网用户进行访问互联的主要入口。这种符号化的标识就是域名。

        域名虽然说更加容易被用户所接受和使用,但是计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此想要达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种翻译效果。

1.2 DNS域名解析流程

        例如,当我们在浏览器地址中输入www.csdn.net时,DNS会有7个步骤,其中前两个步骤是在本地电脑中完成的,后面8个步骤涉及到真正的域名解析服务器:

1.2.1 第一步  检查浏览器缓存

        本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况为几分钟到几个小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不大好,如果时间太长,一旦域名被解析到的Ip有变化(例如百度作为一个大型的互联网服务提供商,它的IP地址就是动态变化的),会导致被客户端缓存的域名无法解析到变化后的IP地址,这段时间内有一部分用户无法访问网站。如果时间太短,会导致用户每一次访问网站都需要重新解析一次域名。

1.2.2 第二步  查找操作系统缓存         

        如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。操作系统也有一个域名解析的过程,在Linux中可以通过/etc/hosts文件来设置,而在Windows中可以通过配置 C:\Windows\System32\drivers\etc\hosts文件来设置,用户可以将任何域名解析到能够访问的IP地址。例如,我们在测试时可以将一个域名解析到一台测试的服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的IP地址上,导致这些域名被劫持。

PS:也有一种情况,电脑会先查找Host文件,再查找浏览器缓存。但是现在有的浏览器会先查找缓存,本文按第二种情况赘述。 

1.2.3 第三步 本地DNS服务器

        前两个过程无法解析的时候,就需要用到我们网络配置中的“DNS服务器地址”了。操作系统会把这个域名发送给这个本地DNS服务器。每个完整的内网通常都会配置本地DNS服务器,例如用户是在学校或者工作单位接入互联网,那么用户的本地DNS服务器肯定在学校或者工作单位里面。他们一般都会通过缓存域名解析结果,当然缓存时间是会受到域名的失效时间控制的。大约80%的域名解析到这里就结束了,后续的DNS迭代和递归也是由本地DNS服务器配置。

windows配置方式:

控制面板->网络和共享中心->更改适配器设置->选中目标适配器右键选择属性->IPV4或者IPV6,然后配置DNS地址。

 1.2.4 第四步 根域名服务器

        如果本地DNS服务器没有命中,则本地域名服务器向上级域名服务器进行迭代查询,并首先向根域名服务器发起请求

1.2.5 第五步 顶级域名服务器

        由根DNS服务器返回给本地DNS域名服务器一个顶级DNS服务器地址。

1.2.6 第六步 Name Server域名服务器

        接受请求的顶级DNS服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server服务器就是我们需要访问的网站域名提供商的服务器,其实该域名的解析任务就是由域名提供商的服务器来完成。比如我要访问www.XXXX.com,而这个域名是X公司注册获得的,那么X公司的服务器上就会有www.XXXX.com的相关信息。

        Name Server服务器会查询存储的域名和IP的映射关系表,再把查询出来的域名和IP地址等等信息,连同一个TTL值返回给本地DNS服务器。

1.2.7 第七步 IP和TTL值

        返回该域名对TTL值,本地DNS服务器会缓存这个域名和IP的对应关系,缓存时间由TTL值控制。把解析的结果返回给本地电脑,本地电脑根据TTL值缓存在本地缓存中,域名解析过程结束在实际的DNS解析过程中。

可能还不止这七个步骤,例如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析过程。

 

2 浏览器输入域名访问整个流程

2.1 第一步 DNS域名解析

具体见上文。

2.2 第二步 建立TCP连接

在经过DNS解析之后,浏览器已经获取了对应网站的IP地址,通过“三次握手”连接到网站服务器。

2.2.1 什么是三次握手?

建立一个 TCP 连接需要“三次握手”,缺一不可:

  • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务端的确认;
  • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态;
  • 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务端都进入ESTABLISHED 状态,完成 TCP 三次握手。

当建立了 3 次握手之后,客户端和服务端就可以传输数据了。

2.2.2  为什么要进行3次握手?

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

  1. 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
  2. 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
  3. 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

三次握手就能确认双方收发功能都正常,缺一不可。

更详细的解答可以看这个:TCP 为什么是三次握手,而不是两次或四次? - 车小胖的回答 - 知乎 。

2.3 第三步 发送HTTP请求

        TCP三次握手之后,客户端和服务器端成功建立了连接,之后浏览器会向服务器特定端口发送HTTP请求。

以Chrome 浏览器为例,按下 F12 即可进入开发者模式,Network 一栏查看HTTP请求的具体报文。

        一个 HTTP 报文由请求行(Request Line)、请求头部(Request Headers)、空行(Blank Line)以及请求体(Request Body)构成,请求行中规定了请求方法、URI 以及 HTTP 的版本,关于每个字段的详细解释,之前的小节已经进行了阐述。

2.4 第四步 服务器端解析请求

        当一个 HTTP 请求打进服务器之后,一般的流程是:网关层(例如Ngnix)最先获取请求,然后路由转发到具体的Web服务,经过一段业务逻辑之后,可能还会查询数据库,最后将处理的结果返回给浏览器客户端。

        对于后端开发程序员来说,日常的工作就集中在服务器端,特别是流程图中的"Web业务服务"这块,例如基于 Spring 框架、Django 框架或者ThinkPHP 框架进行业务逻辑开发和上线。

2.5 第五步 返回HTTP响应

        服务器端处理业务结果之后,也要返回 HTTP 响应,HTTP 响应由状态行(Status Line)、响应头部(Response Headers)、空行(Blank Line)以及响应体(Response Body)构成,关于每个部分的细节也不再赘述。需要特别注意的是,响应体中的各种错误码定义:

2.6 第六步 TCP四次挥手

        当浏览器获取了域名对应的页面信息,为了避免服务器和客户端双方的资源损耗,客户端会请求断开 TCP 连接,和三次握手的过程相似。

        断开一个 TCP 连接则需要“四次挥手”,缺一不可,TCP 四次挥手的过程可以总结为::

  1. 第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务端的数据传送。然后客户端进入 FIN-WAIT-1 状态。
  2. 第二次挥手:服务端收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
  3. 第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
  4. 第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。

只要四次挥手没有结束,客户端和服务端就可以继续传输数据

 

 2.6.1 为什么需要四次挥手? 

TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

举个例子:A 和 B 打电话,通话即将结束后。

  1. 第一次挥手:A 说“我没啥要说的了”
  2. 第二次挥手:B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
  3. 第三次挥手:于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
  4. 第四次挥手:A 回答“知道了”,这样通话才算结束。

2.6.2 四次挥手需要等待2MSL的意义 

第四次挥手时,客户端发送给服务端的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

MSL(Maximum Segment Lifetime) : 一个片段在网络中最大的存活时间,2MSL 就是一个发送和一个回复所需的最大时间。如果直到 2MSL,Client 都没有再次收到 FIN,那么 Client 推断 ACK 已经被成功接收,则结束 TCP 连接。

2.7 浏览器解析HTML     

服务器返回给客户端的是 HTML 以及 CSS、Javascript 代码,要展示为静态页面,还需要经过浏览器的解析行为。

浏览器内核引擎解析 HTML 文档并且将标签转换为 DOM(Document Object Model,文档对象模型)树的 DOM 节点,不同浏览器的渲染解析流程大同小异。

同时,浏览器内核引擎还会解析 CSS 生成 CSS 规则树,按照从右到左的顺序读取选择器。

另外,在浏览器中还有个"JS脚本解析器",解析 HTML 和 CSS 是多线程同时执行的,CSS 解析失败不会影响 HTML 内容的解析,但是如果 JS 脚本解析过程中触发了异常,会直接终止 HTML 内容的解析。关于更详细的解析动作,作为后端开发,我们不需要了解太多,这块也不会作为面试考察的内容。

 

更详细的可以拜读此篇文章https://zhuanlan.zhihu.com/p/166440446

 

相关文章:

从DNS到TCP:DNS解析流程和浏览器输入域名访问流程

1 DNS 解析流程 1.1 什么是DNS域名解析 在生活中我们会经常遇到域名,比如说CSDN的域名www.csdn.net,百度的域名www.baidu.com,我们也会碰到IP,现在目前有的是IPV4,IPV6。那这两个有什么区别呢?IP地址是互联网上计算机…...

【JQuery—前端快速入门】JQuery 基础语法

JQuery JQuery是一个快速、简洁且功能丰富的JavaScript框架; 1. 引入依赖 使用JQuery需要先引入对应的库&#xff1b; 在使用 JQuery CDN 时&#xff0c;只需要在 HTML 文档中加入如下代码 <script src"https://code.jquery.com/jquery-3.7.1.min.js"></s…...

即梦AI发布新数字人模型OmniHuman-1

简介 随着人工智能技术的发展&#xff0c;特别是深度学习和自然语言处理的进步&#xff0c;AI在内容创作领域的应用越来越广泛。字节跳动作为一家领先的科技公司&#xff0c;一直在探索如何利用AI技术来提升用户体验和创造力。OmniHuman-1模型正是在这种背景下诞生的&#xff…...

ARM CM3核 压栈流程

STM32F103 使用 ARM Cortex-M3 内核&#xff0c;与 STM32F013&#xff08;Cortex-M0&#xff09;相比&#xff0c;其压栈行为有所不同&#xff0c;主要体现在异常自动压栈和**手动压栈&#xff08;函数调用&#xff09;**两方面。 1. 进入异常/中断时的自动压栈 当 STM32F103 …...

WHAT - RxJS 异步事件流处理

目录 RxJS 关键概念简单示例常用操作符1. 创建 Observables2. 转换操作符&#xff08;map&#xff09;3. 过滤操作符&#xff08;filter&#xff09;4. 合并多个流&#xff08;mergeMap&#xff09; 适用于 React & TypeScriptReact 组件中使用 RxJS RxJS 是一个用于处理异…...

vue组合式API中prop

*一、了解(事件与$emit) 一个组件需要显示声明它所接受的props,这样才知道外部传入的那些是props,那些是透传attribute。 在<script setup>单文件组件中,props可以使用defineProps()宏来声明,defineProps 是一个仅 <script setup> 中可用的编译宏命令,并不需…...

【HarmonyOS Next】自定义Tabs

背景 项目中Tabs的使用可以说是特别的频繁&#xff0c;但是官方提供的Tabs使用起来&#xff0c;存在tab选项卡切换动画滞后的问题。 原始动画无法满足产品的UI需求&#xff0c;因此&#xff0c;这篇文章将实现下面页面滑动&#xff0c;tab选项卡实时滑动的动画效果。 实现逻…...

算法 并查集

目录 前言 一 并查集的思路 二 并查集的代码分析 三 实操我们的代码 四 并查集的代码优化 总结 前言 并查集主要是用来求解集合问题的&#xff0c;用来查找集合还有就是合并集合&#xff0c;可以把这个运用到最小生成树里面 一 并查集的思路 1 并查集的相关的操作…...

EP 架构:未来主流方向还是特定场景最优解?

DeepSeek MoE架构采用跨节点专家并行&#xff08;EP&#xff09;架构&#xff0c;在提升推理系统性能方面展现出巨大潜力。这一架构在发展进程中也面临诸多挑战&#xff0c;其未来究竟是会成为行业的主流方向&#xff0c;还是仅适用于特定场景&#xff0c;成为特定领域的最优解…...

记忆化搜索与动态规划:原理、实现与比较

记忆化搜索和动态规划是解决优化问题的两种重要方法&#xff0c;尤其在处理具有重叠子问题和最优子结构性质的问题时非常有效。 目录 1. 记忆化搜索&#xff08;Memoization&#xff09; 定义&#xff1a; 实现步骤&#xff1a; 示例代码&#xff08;斐波那契数列&#xff0…...

LLMR//https://github.com/microsoft/llmr?locale=zh-cn

https://github.com/microsoft/llmr?localezh-cn Introduction 这个 repo 包含 LLMR 中描述的代码&#xff0c;实现了混合现实框架的大型语言模型。 此软件包是“用语言创造世界”的原型&#xff0c;它允许通过自然语言实时创建具有视觉、行为和交互元素的对象、工具和场景…...

Free Auto Clicker - 在任意位置自动重复鼠标点击

“想让鼠标自己动起来&#xff0c;解放双手去做更有趣的事&#xff1f;”Free Auto Clicker 就像你的数字小助手&#xff0c;能在任意位置自动重复点击鼠标。从玩游戏到刷网页&#xff0c;这款免费工具让你告别枯燥的重复操作&#xff0c;效率瞬间起飞&#xff01; 你有没有想…...

高考數學。。。

2024上 具体来说&#xff0c;直线的参数方程可以写为&#xff1a; x1t y−t z1t 二、简答题(本大题共5小题&#xff0c;每小题7分&#xff0c;共35分。) 12.数学学习评价不仅要关注结果评价&#xff0c;也要关注过程评价。简要说明过程评价应关注哪几个方面。…...

MWC 2025|紫光展锐联手美格智能发布5G通信模组SRM812

在2025年世界移动通信大会&#xff08;MWC 2025&#xff09;期间&#xff0c;紫光展锐携手美格智能正式推出了基于紫光展锐V620平台的第二代5G Sub6G R16模组SRM812&#xff0c;以超高性价比方案&#xff0c;全面赋能合作伙伴&#xff0c;加速5G规模化应用在各垂直领域的全面落…...

5分钟快速搭建一个 SpringBoot3 + MyBatis-Plus 工程项目

环境 idea 2023.3.5 jdk 17 mysql 8 创建SpringBoot工程 创建SpringBoot工程&#xff0c;这里有两种方式可选&#xff0c;一种是使用idea提供的Spring Initializr自动创建&#xff0c;一种是通过Maven Archetype手动创建 自动创建SpringBoot工程 使用Spring Initializr创建…...

深度学习-大白话解释循环神经网络RNN

目录 一、RNN的思想 二、RNN的基本结构 网络架构 ​关键点 三、RNN的前向传播 四、RNN的挑战:梯度爆炸和梯度消失 问题分析 ​示例推导 五、LSTM:RNN的改进 核心组件 ​网络架构 3. LSTM 的工作流程 4. 数学公式总结 5. LSTM 的优缺点 ​优点 ​缺点 6. LSTM 的…...

20.<Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…...

windows下使用Hyper+wsl实现ubuntu下git的平替

文章目录 前言一、安装Hyper、wsl1. 安装Hyper2. 安装wsl 二、配置Hyper三、安装并使用git总结 前言 众所周知&#xff0c;Ubuntu下安装git只需执行sudo apt install git即可使用默认终端拉取代码&#xff0c;但是Windows上使用git既没有linux便捷&#xff0c;又没有MacOS优雅…...

Python在实际工作中的运用-提取Pdf文件内容

Pdf文件是我们日常工作中经常会遇到的一种文件格式&#xff0c;对于这种文件的提取 pdfplumber 库可以非常出色的完成处理工作&#xff0c;它是一个纯 Python 第三方库&#xff0c;适合 python 3.x 版本&#xff0c;通常用来查看pdf各类信息&#xff0c;能有效提取文本、表格&…...

Python+Vue+数据可视化的考研知识共享平台(源码+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 程序介绍 近些年来&#xff0c;科技以一种近乎狂飙突进的态势呈爆发式发展&#xff0c;成果之丰硕…...

VirtualBox虚拟机MacOS从Big Sur升级到Sequoia(失败)

VirtualBox虚拟机里安装好Big Sur版本&#xff0c;尝试升级到Sequoia&#xff0c;但是最终失败了。 软件升级 直接在系统偏好-软件更新里可以看到提示&#xff0c;提示可以升级到15版本Sequoia 点击同意&#xff0c;看能不能升级到Sequoia吧。升级前先用时光做了备份。 升级…...

深度学习---卷积神经网络

一、卷积尺寸计算公式 二、池化 池化分为最大池化和平均池化 最常用的就是最大池化&#xff0c;可以认为最大池化不需要引入计算&#xff0c;而平均池化需要引出计算&#xff08;计算平均数&#xff09; 每种池化还分为Pooling和AdaptiveAvgPool Pooling(2)就是每2*2个格子…...

深入解析网络协议:从OSI七层模型到HTTP与TCP/IP的关系

在网络的世界里&#xff0c;理解不同协议如何协同工作以实现高效、可靠的通信至关重要。无论是构建动态的Web应用&#xff0c;还是进行复杂的网络编程&#xff0c;对基础协议的理解都是不可或缺的。本文首先介绍OSI七层模型&#xff0c;这是一个为网络系统设计提供通用参考框架…...

链表-相关面试算法题

目录 面试题 02.04. 分割链表 面试题 02.05. 链表求和 面试题 02.06. 回文链表 面试题 02.07. 链表相交 面试题 02.04. 分割链表 面试题 02.04. 分割链表 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点…...

CSS Overflow 属性详解

CSS Overflow 属性详解 在网页设计和开发中,CSS Overflow 属性是一个非常重要的特性,它决定了当内容超出其容器大小时应该如何处理。本文将详细介绍 CSS Overflow 属性的相关知识,包括其语法、作用、常用属性值以及一些实际应用场景。 1. CSS Overflow 属性概述 CSS Over…...

一、MySQL备份恢复

一、MySQL备份恢复 1.1 MySQL日志管理 数据库中数据丢失或被破坏可能原因 误删除数据库 数据库工作时&#xff0c;意外断电或程序意外终止 由于病毒造成的数据库损坏或丢失 文件系统损坏后&#xff0c;系统进行自检操作 升级数据库时&#xff0c;命令语句不严格 设备故…...

Python-04BeautifulSoup网络爬虫

2025-03-04-BeautifulSoup网络爬虫 记录BeautifulSoup网络爬虫的核心知识点 文章目录 2025-03-04-BeautifulSoup网络爬虫 [toc]1-参考网址2-学习要点3-核心知识点1. 安装2. 导入必要的库3. 发送 HTTP 请求4. 创建 BeautifulSoup 对象5. 解析 HTML 内容5.1 查找标签5.2 根据属性…...

记录uniapp小程序对接腾讯IM即时通讯无ui集成(2)

完成以上步骤之后开始进行登录&#xff0c;登陆就需要账号。这个账号我们可以在腾讯云中创建。 有了账号之后开始去小程序进行登陆操作。腾讯云接口文档 这里除了帐号还需要一个校验值userSig正常项目开发这个字段可以在登陆后让后端返回&#xff0c;现在是测试我们直接去控制…...

DE2115实现4位全加器和3-8译码器(FPGA)

一、配置环境 1、Quartus 18.1安装教程 软件&#xff1a;Quartus版本&#xff1a;Quartus 18.1语言&#xff1a;英文大小&#xff1a;5.78G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09; 下载通道①百度网盘丨64位下载…...

大白话面试中应对自我介绍

在面试中&#xff0c;自我介绍是开场的关键环节&#xff0c;它就像你递给面试官的一张“个人名片”&#xff0c;要让面试官快速了解你并对你产生兴趣。下面详细讲讲应对自我介绍的要点及回答范例。 一、自我介绍的时间把控 一般面试中的自我介绍控制在1 - 3分钟比较合适。时间…...

【JavaScript—前端快速入门】JavaScript 综合案例 — 猜数字

JavaScript 综合案例—猜数字 预期效果 需求 完成基本的页面布局在文本框输入数字后&#xff0c;点击"猜"按钮&#xff0c;结果那一行会显示"猜大了"或者"猜小了"每猜一次&#xff0c;就会增加一次猜的次数猜到数字后&#xff0c;结果显示要猜的…...

X Window---图形接口

摘抄自 鸟哥的linux私房菜 基础篇 第四版 有鉴于图形用户接口(Graphical User Interface, GUI) 的需求日益加重&#xff0c;在 1984 年由 MIT 与其他第三方首次发表了 X Window System &#xff0c;并且更在 1988 年成立了非营利性质的 XFree86 这个组织。所谓的XFree86 其实是…...

CSS浮动详解

1. 浮动的简介 浮动是用来实现文字环绕图片效果的 2.元素浮动后会有哪些影响 对兄弟元素的影响&#xff1a; 后面的兄弟元素&#xff0c;会占据浮动元素之前的位置&#xff0c;在浮动元素的下面&#xff1b;对前面的兄弟 无影响。 对父元素的影响&#xff1a; 不能撑起父元…...

shell脚本编程实践第2天

1 内容格式化 1.1 输出格式化 1.1.1 echo解读 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结、三个方面来学习。 基础知识 命令简介 echo命令的功能是将内容输出到默认显示设备&#xff0c;一般起到一个提示的作用。OPTIONS&#xff1a; -n 不要在最后自…...

wgcloud-server端部署说明

Wgcloud 是一款开源的轻量级服务器监控系统&#xff0c;支持多平台&#xff0c;可对服务器的 CPU、内存、磁盘、网络等指标进行实时监控。 以下是 Wgcloud Server端的详细部署步骤&#xff1a; 环境准备 服务器&#xff1a; 至少准备两台服务器&#xff0c;一台作为监控端&a…...

AES/CBC/PKCS5Padding加密

1、加密代码如下 public static String encryptAEs_CBC(String data,String key,byte[] iv) {Cipher cipher = null;try {cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//位数不够,自动补一个长度int blocksize = cipher.getBlockSize();byte[] dataBytes …...

9.8 Visual Studio 2022安装Qt 和安装graphic

1.安装Qt 1. 安装Qt 首先打开Visual Studio&#xff0c;然后创建一个项目&#xff0c;再在最上面的一行依次打开“扩展-->管理扩展”&#xff0c;再在搜索框内搜索“QT”&#xff0c;显示如下界面&#xff1a; 再在右边QT右边有个“在浏览器中查看”&#xff0c;打开后出现…...

【C++设计模式】第四篇:建造者模式(Builder)

注意&#xff1a;复现代码时&#xff0c;确保 VS2022 使用 C17/20 标准以支持现代特性。 分步骤构造复杂对象&#xff0c;实现灵活装配 1. 模式定义与用途 核心目标&#xff1a;将复杂对象的构建过程分离&#xff0c;使得同样的构建步骤可以创建不同的表示形式。 常见场景&am…...

Spring Boot如何利用Twilio Verify 发送验证码短信?

Twilio提供了一个名为 Twilio Verify 的服务&#xff0c;专门用于处理验证码的发送和验证。这是一个更为简化和安全的解决方案&#xff0c;适合需要用户身份验证的应用。 使用Twilio Verify服务的步骤 以下是如何在Spring Boot中集成Twilio Verify服务的步骤&#xff1a; 1.…...

制造业中的“大数据”:如何实现精准决策?

在当今全球经济竞争日趋激烈、技术变革周期不断缩短的环境下&#xff0c;制造业面临着全新的挑战和机遇。随着信息技术的飞速发展&#xff0c;“大数据”正以前所未有的速度渗透到制造业的各个环节&#xff0c;帮助企业实现更精准的决策、更灵活的生产组织以及更敏捷的市场响应…...

Linux cat 命令

cat&#xff08;英文全拼&#xff1a;concatenate&#xff09;命令用于连接文件并打印到标准输出设备上&#xff0c;它的主要作用是用于查看和连接文件。 使用权限 所有使用者 语法格式 cat [选项] [文件] 参数说明&#xff1a; -n&#xff1a;显示行号&#xff0c;会在输…...

CSS—flex布局、过渡transition属性、2D转换transform属性、3D转换transform属性

​ 1.flex布局 也叫弹性布局&#xff0c;是浏览器提倡的布局模型&#xff0c;非常适合结构化布局&#xff0c;提供了强大的空间分布和对齐能力&#xff0c;不会产生浮动布局中脱标现象&#xff0c;布局网页更简单&#xff0c;更灵活。 flex容器属性&#xff1a; 属性描述d…...

Java UDP 通信:实现简单的 Echo 服务器与客户端

在计算机网络编程中&#xff0c;UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它允许应用程序在不建立连接的情况下发送数据包。与 TCP 不同&#xff0c;UDP 不保证数据包的顺序、可靠性或完整性&#xff0c;但它具有低延迟和低开销…...

使用GitLink个人建站服务部署Allure在线测试报告

更多技术文章&#xff0c;访问软件测试社区 文章目录 &#x1f680;前言&#x1f511;开通GitLink个人建站服务1. 前提条件2. 登录GitLink平台&#xff08;https://www.gitlink.org.cn/login&#xff09;3. 进入设置>个人建站>我的站点4. 新建站点5. 去仓部进行部署6. 安…...

Mybatis plus异常: type `java.time.LocalDateTime` not supported by default

1、问题&#xff1a; Java数据库实体对象有字段如下&#xff1a; TableField(typeHandler JacksonTypeHandler.class) private Map<String, Object> dataDetail; 如果dataDetail中有LocalDateTime对象&#xff0c;在保存时会报如下异常&#xff1a; Caused by: com.…...

Django:文件上传时报错in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.

即&#xff1a;使用Content-Security-Policy 1.安装Django CSP中间件&#xff1a; pip install django-csp 2.更改项目配置&#xff1a; # settings.py MIDDLEWARE [...csp.middleware.CSPMiddleware,... ]CSP_DEFAULT_SRC ("self",) CSP_FRAME_ANCESTORS (&q…...

腾讯云 | 微搭低代码快速开发数据表单应用

如上所示&#xff0c;登录腾讯云微搭低代码业务控制台&#xff0c;开始新创建一个应用&#xff0c;创建应用的方式包括&#xff0c;根据实际的业务需求&#xff0c;从模版列表中选择一个模板填入数据模型创建新应用&#xff0c;使用微搭组件自主设计数据模型创建新应用&#xf…...

【RabbitMQ】RabbitMQ的核心概念与七大工作模式

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【中间件】企业级中间件剖析 在现代分布式系统和微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09; 是解决服务间通信、系统解耦和流量削峰的关键技术之一。而 RabbitMQ 作为一…...

金蝶ERP星空对接流程

1.金蝶ERP星空OPENAPI地址&#xff1a; 金蝶云星空开放平台 2.下载金蝶云星空的对应SDK包 金蝶云星空开放平台 3.引入SDK流程步骤 引入Kingdee.CDP.WebApi.SDK 右键项目添加引用&#xff0c;在打开的引用管理器中选择浏览页签&#xff0c;点击浏览按钮&#xff0c;找到从官…...

【C++】基于范围的for循环(range-based for loop)

一. std::vector 元素排布顺序 在 C 中&#xff0c;std::vector 是一个动态数组&#xff0c;用于存储同类型元素的序列。当你向 std::vector 中添加元素时&#xff08;通常通过 push_back 方法&#xff09;&#xff0c;元素是按照你添加它们的顺序排列的。 具体来说&#xff…...