HTTPS、DNS、正则表达式
HTTPS原理
HTTPS(Hypertext Transfer Protocol Secure)是一种安全的通信协议,它基于HTTP协议,在数据传输过程中使用了加密技术来保护通信的安全性和完整性。HTTPS的工作原理主要包括以下几个步骤:
-
客户端发起HTTPS请求:客户端(如Web浏览器)向服务器发送一个HTTPS请求。
-
服务器获取证书:服务器收到请求后,会将自己的证书发送给客户端。证书中包含了服务器公钥、服务器的身份信息以及证书的签发机构等信息。
-
客户端验证证书:客户端在收到服务器的证书后,会对证书进行验证。验证过程包括检查证书的有效期、签名是否有效以及证书是否由可信任的证书颁发机构签发等。
-
客户端生成会话密钥:如果证书验证通过,客户端会生成一个随机的会话密钥,用于后续的数据加密和解密。
-
客户端使用服务器公钥加密会话密钥:客户端使用服务器的公钥对会话密钥进行加密,并将加密后的会话密钥发送给服务器。
-
服务器使用私钥解密会话密钥:服务器收到加密的会话密钥后,使用自己的私钥进行解密,得到原始的会话密钥。
-
数据传输:客户端和服务器使用会话密钥对数据进行加密和解密,保证数据在传输过程中的安全性。
通过以上步骤,HTTPS协议可以确保通信过程中的数据安全性和完整性。加密技术的使用可以防止数据被窃取或篡改,同时证书的验证可以确保服务器的身份可信。这使得HTTPS成为了保护用户隐私和防止网络攻击的重要协议。
DNS原理
DNS(Domain Name System)是互联网中用于将域名转换为 IP 地址的系统。它的工作原理可以简单地分为以下几个步骤:
1. 用户发起域名解析请求:当用户在浏览器中输入一个域名时(如www.example.com),浏览器会向本地计算机的 DNS 客户端发送一个 DNS 查询请求。
2. 本地 DNS 客户端查询本地缓存:本地 DNS 客户端首先会查询本地缓存,看是否已经存储了该域名的 IP 地址。如果有,就直接返回给用户。
3. 本地 DNS 客户端查询根域名服务器:如果本地缓存中没有该域名的 IP 地址,本地 DNS 客户端会向根域名服务器发送查询请求。根域名服务器是全球 DNS 系统的顶级服务器,负责管理顶级域名(如.com、.org等)的 DNS 服务器地址。
4. 根域名服务器返回顶级域名服务器地址:根域名服务器会将负责该顶级域名的顶级域名服务器的地址返回给本地 DNS 客户端。
5. 本地 DNS 客户端查询顶级域名服务器:本地 DNS 客户端会向负责该顶级域名的顶级域名服务器发送查询请求。
6. 顶级域名服务器返回权威域名服务器地址:顶级域名服务器会将负责该域名的权威域名服务器的地址返回给本地 DNS 客户端。
7. 本地 DNS 客户端查询权威域名服务器:本地 DNS 客户端会向负责该域名的权威域名服务器发送查询请求。
8. 权威域名服务器返回域名对应的 IP 地址:权威域名服务器会将该域名对应的 IP 地址返回给本地 DNS 客户端。
9. 本地 DNS 客户端将 IP 地址返回给用户:本地 DNS 客户端收到 IP 地址后,将其返回给用户的浏览器。
10. 用户的浏览器发起连接请求:用户的浏览器使用获取到的 IP 地址,向对应的服务器发起连接请求,建立与服务器的通信。
通过以上步骤,DNS 实现了将用户输入的域名转换为对应的 IP 地址,从而使得用户能够通过域名访问到对应的网站或服务。DNS 的分布式设计和缓存机制可以提高解析效率和网络性能。
正则表达式
正则表达式是表达文本模式的方法。
-
.:匹配任何单个字符。 -
?:上一项是可选的,最多匹配一次。 -
*:前一项将被匹配零次或多次。 -
+:前一项将被匹配一次或多次。 -
{N}:上一项完全匹配N次。 -
{N,}:前一项匹配N次或多次。 -
{N,M}:前一项至少匹配N次,但不超过M次。 -
--:表示范围,如果它不是列表中的第一个或最后一个,也不是列表中某个范围的终点。 -
^:匹配行首的空字符串;也代表不在列表范围内的字符。 -
$:匹配行尾的空字符串。 -
\b:匹配单词边缘的空字符串。 -
\B:匹配空字符串,前提是它不在单词的边缘。 -
\<:匹配单词开头的空字符串。 -
\>:匹配单词末尾的空字符串。
| \d | 匹配一个数字字符。等价于[0-9]。 |
|---|---|
| \D | 匹配一个非数字字符。 |
| \f | 匹配一个换页符。 |
| \n | 匹配一个换行符。 |
| \r | 匹配一个回车符。 |
| \s | 匹配任何不可见字符,包括空格、制表符、换页符等等。 |
| \S | 匹配任何可见字符。 |
| \t | 匹配一个制表符。 |
| \v | 匹配一个垂直制表符。 |
| \w | 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”, |
| \W | 匹配任何非单词字符。 |
元字符
元字符是表示特殊函数的字符,包括以下这些^ $ . [ ] { } - ? * + ( ) | \\。除了元字符,其他字符在正则表达式中,都表示原来的含义。
-
.匹配任意字符,但不含空字符 -
^匹配文本行开头 -
$匹配文本行结尾
$ grep -h '.zip' dirlist*.txt
上面命令在文件中查找包含正则表达式“.zip”的文本行。注意,上面命令不会匹配zip程序,因为zip只有三个字符,而.zip要求四个字符。
$ grep -h '^zip' dirlist*.txt $ grep -h 'zip$' dirlist*.txt
上面命令分别在文件列表中搜索行首,行尾以及行首和行尾同时包含字符串“zip”(例如,zip 独占一行)的匹配行。 注意正则表达式‘^$’(行首和行尾之间没有字符)会匹配空行。
方括号
方括号之中的字符,表示可以任意匹配其中的一个。
$ grep -h '[bg]zip' dirlist*.txt
上面命令匹配包含字符串“bzip”或者“gzip”的任意行。
注意,元字符放入方括号之中,会失去其特殊含义。但有两种情况除外,^在方括号的开头,表示否定,否则只是一个普通字符,表示原义。
$ grep -h '[^bg]zip' dirlist*.txt
上面命令匹配不以b或g开头的zip字符串。注意,上面命令不会匹配zip,因为一个否定的字符集仍然要求存在一个字符。
-在方括号之中表示一个字符区域。
$ grep -h '^[A-Z]' dirlist*.txt
上面命令匹配所有以大写字母开头的文本行。类似的,^[A-Za-z0-9]表示以大写字母、小写字母、数字开头的文本行。
注意,连字号如果不构成一个字符区域,则表示其本来的含义。
$ grep -h '[-AZ]' dirlist*.txt
上面命令匹配包含一个连字符,或一个大写字母“A”,或一个大写字母“Z”的文件名。
预定义字符类
由于locale设置不同,Shell展开正则表达式[A-Z]时,可能不是解释为所有大写字母,而是解释为包括所有字母的字典顺序。
$ ls /usr/sbin/[A-Z]*
上面命令在某些发行版里面,会返回所有大写字母或小写字母开头的文件。
为了避免这个问题,可以使用正则表达式的预定义字符类。
-
[:alnum:]字母数字字符。在 ASCII 中,等价于:[A-Za-z0-9] -
[:word:]与[:alnum:]相同, 但增加了下划线字符。 -
[:alpha:]字母字符。在 ASCII 中,等价于[A-Za-z] -
[:blank:]包含空格和 tab 字符。 -
[:cntrl:]ASCII 的控制码。包含了0到31,和127的 ASCII 字符。 -
[:digit:]数字0到9 -
[:graph:]可视字符。在 ASCII 中,它包含33到126的字符。 -
[:lower:]小写字母。 -
[:punct:]标点符号字符。 -
[:print:]可打印的字符。等于[:graph:]中的所有字符,再加上空格字符。 -
[:space:]空白字符,包括空格,tab,回车,换行,vertical tab, 和 form feed.在 ASCII 中, 等价于[ \t\r\n\v\f] -
[:upper:]大写字母。 -
[:xdigit:]用来表示十六进制数字的字符。在 ASCII 中,等价于[0-9A-Fa-f]
$ ls /usr/sbin/[[:upper:]]*
上面命令返回所有大写字母开头的文件名。
选择
|表示匹配一系列字符串之中的一个。注意与方括号区分,方括号表示匹配一系列字符之中的一个。
$ echo "AAA" | grep -E 'AAA|BBB' AAA $ echo "BBB" | grep -E 'AAA|BBB' BBB $ echo "CCC" | grep -E 'AAA|BBB' $
上面代码中,AAA|BBB表示匹配字符串AAA或者是字符串BBB。grep程序使用-E参数,表示按照正则表达式规则匹配。并且,这个正则表达式放在单引号之中,为的是阻止Shell把|解释为管道操作符。
|可以多个连用,也可以与其他正则规则结合使用。
$ echo "AAA" | grep -E 'AAA|BBB|CCC' $ grep -Eh '^(bz|gz|zip)' dirlist*.txt
量词操作符
量词操作符表示一个元素被匹配的次数。
-
?匹配前面的元素出现0次或1次 -
*匹配前面的元素出现0次或多次 -
+匹配前面的元素出现1次或多次 -
{n}匹配前面的元素出现了n次 -
{n,m}匹配前面的元素它至少出现了n次,但是不多于m次 -
{n,}匹配前面的元素至少出现了n次 -
{,m}匹配前面的元素,如果它出现的次数不多于 m 次。
相关文章:
HTTPS、DNS、正则表达式
HTTPS原理 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的通信协议,它基于HTTP协议,在数据传输过程中使用了加密技术来保护通信的安全性和完整性。HTTPS的工作原理主要包括以下几个步骤: 客户端发起HTTPS请求…...
MAC电脑设置charles,连接手机的步骤说明(个人实际操作)
目录 一、charles web端设置 1. 安装charles之后,先安装证书 2. 设置 Proxy-Proxy Settings 3. 设置 SSL Proxying 二、手机的设置 1. 安卓 2. ios 资料获取方法 一、charles web端设置 1. 安装charles之后,先安装证书 Help-SSL Proxying-Inst…...
百度文心一言接入教程-Java版
原文链接 前言 前段时间由于种种原因我的AI BOT网站停运了数天,后来申请了百度的文心一言和阿里的通义千问开放接口,文心一言的接口很快就通过了,但是文心一言至今杳无音讯。文心一言通过审之后,很快将AI BOT的AI能力接入了文心…...
Games101学习笔记 - 基础数学
向量 向量:方向和长度,没有起始位置 向量长度:各个方向平方相加开方 单位向量:向量除向量的长度 点乘 在笛卡尔坐标系中的点乘计算: 几何意思: 表示一个向量在另一个向量上的投影点乘在图形学中应用&a…...
Linux进程的认识
查看进程指令proc/ps 注意哦, 我们经常使用的指令, 像ls, touch…这些指令在启动之后本质上也是进程 proc 是内存文件系统, 存放着当前系统的实时进程信息. 每一个进程在系统中, 都会存在一个唯一的标识符(pid -> process id), 就如同学生在学校里有一个专门的学号一样. 大…...
向量vector与sort()
运行代码: //向量与sort() #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;friend istream& operator>>(istream& is, Item& ii);friend ostream& operator<<(ostream& o…...
Netty学习(三)
文章目录 三. Netty 进阶1. 粘包与半包1.1 粘包现象服务端代码客户端代码 1.2 半包现象服务端代码客户端代码 1.3 现象分析粘包半包缘由滑动窗口MSS 限制Nagle 算法 1.4 解决方案方法1,短链接方法2,固定长度方法3,固定分隔符方法4,…...
c++学习(布隆过滤器)[23]
布隆 布隆过滤器(Bloom Filter)是一种概率型数据结构,用于判断一个元素是否可能存在于一个集合中。它使用多个哈希函数和位图来表示集合中的元素。 布隆过滤器的基本原理如下: 初始化:创建一个长度为m的位图…...
React的UmiJS搭建的项目集成海康威视h5player播放插件H5视频播放器开发包 V2.1.2
最近前端的一个项目,大屏需要摄像头播放,摄像头厂家是海康威视的,网上找了一圈都没有React集成的,特别是没有使用UmiJS搭脚手架搭建的,所以记录一下。 海康威视的开放平台的API地址,相关插件和文档都可以下…...
细讲TCP三次握手四次挥手(二)
TCP/IP 协议族 应用层 应用层( application-layer )的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。 对于不同的网络应用需要不同的应用层协议…...
LeetCode Top100 Liked 题单(序号19~)
19. Remove Nth Node From End of List 题意:给一个链表,删除从尾数起的第n个结点,返回头节点。 我的思路 指针到最后,数出来有多少个,之从前向后数,再删掉节点 代码 10ms Beats 16.06% class Solution…...
qssh使用
到官网下载qssh的源码QSsh-botan-1,使用qtcreator打开后,直接编译,即可得到qssh的库 头文件将QSsh-botan-1\src\libs\ssh目录下的.h文件拷到include文件夹下,即为库头文件。 qssh有个问题,如果你将qssh的类放在子线程…...
持续部署CICD
目录 (1)CICD的开展场景 (2)项目实际应用 CICD 是持续集成(Continuous Integration)和持续部署(Continuous Deployment)简称。指在研发过程中自动执行一系列脚本来降低开发引入 bug…...
ARM 循环阻塞延迟函数
串行驱动的关键是双方能够按照既定的时序进行检测、设置相关引脚上的电平,比如单总线、I2c这样基本的可以用GPIO模拟的时序协议,需要主从双方,必须在链路接口内严格按照微妙级的延迟单位进行时序同步。 所以,在这种对时间要求很敏…...
Spark的DataFrame和Schema详解和实战案例Demo
1、概念介绍 Spark是一个分布式计算框架,用于处理大规模数据处理任务。在Spark中,DataFrame是一种分布式的数据集合,类似于关系型数据库中的表格。DataFrame提供了一种更高级别的抽象,允许用户以声明式的方式处理数据,…...
WPF线程使用详解:提升应用性能和响应能力
在WPF应用程序开发中,线程的合理使用是保证应用性能和响应能力的关键。WPF提供了多种线程处理方式,包括UI线程、后台线程、Task/Async Await和BackgroundWorker。这些方式与传统的Thread类相比,更加适用于WPF框架,并能够简化线程操…...
ava版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台
提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发定制,源码交付。 Java版知识付费-轻松拥有知识付费平台 多种直播形式,全面满足直播场景需求 公开课、小班课、独…...
libuv库学习笔记-basics_of_libuv
Basics of libuv libuv强制使用异步和事件驱动的编程风格。它的核心工作是提供一个event-loop,还有基于I/O和其它事件通知的回调函数。libuv还提供了一些核心工具,例如定时器,非阻塞的网络支持,异步文件系统访问,子进…...
【Vuvuzela 声音去噪算法】基于流行的频谱减法技术的声音去噪算法研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Vue + Element-ui组件上传图片报错问题解决方案
在前端开发中,我们经常需要模拟网络请求以进行单元测试或开发调试。而在模拟网络请求时,我们常常会使用到MockXMLHttpRequest对象。MockXMLHttpRequest对象是一个用于模拟XMLHttpRequest对象的工具,它提供了一种简单的方式来模拟网络请求&…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
