HTTP / HTTPS 协议
目录
一、前言:
二、Fiddler 抓包工具:
三、http 协议:
1、http 请求:
1.(1)请求行:
1、(2) 请求头:
1、(3) 请求正文:
2、http 响应:
2、(1) 状态码:
2、(2) 响应头:
2、(3) 响应正文:
四、请求行 GET 和 POST 方法的区别:
五、 https 协议:
1、https 工作过程:
1、(1)对称加密:
1、(2)非对称加密:
1、(3)中间人攻击:
1、(4)通过证书解决“中间人”攻击:
一、前言:
http 和 https 协议是在应用层的协议,而 https 协议是在 http 协议基础上加了一个加密解密的工作。
在此之前,要先了解 http 的协议格式,http 协议分为请求格式和响应格式。
二、Fiddler 抓包工具:
当前网络环境中,纯使用 http 协议的网站很少,更多都是 https 协议的,那么,由于 https 是应用层的协议,一般是查看不了的,怎么才能查看?
使用 fiddler 抓包工具,就能从当前计算机的网卡获取到经过的网络数据包,相当于一个 “门卫”,所有的网络数据包想要通过(发送和接收)数据包都要经过这个“门卫”。前面说到,当前网络环境中,纯使用 http 协议的网站很少,更多都是 https 协议,所以安装 fiddler 时要安装它的证书才能查看 https 具体内容。
下面就是一次抓包的请求和响应结果:
浏览器网址栏输入“bing”进入必应搜索引擎,fiddler 抓到了其中一条左边红色圈起来的信息,是当前一次发送的请求和响应。右边的上面绿色圈起来的是一次请求,右边下面蓝色圈起来的是当前请求的响应结果。
点击 “Raw”,就能显示 http 的原始数据。点击 “View in Notepad” 就能把当前的数据以行文本像形式显现。
三、http 协议:
通过上面的 fiddler 抓包,可以知道,http 协议分为四大部分:
1、http 请求:
请求行,请求头(header),空行,请求正文(body)。
例如:
不同颜色圈起来的四个部分,从上到下分别代表,请求行,请求头,空行,请求正文。
其中,空行是请求头结束的标记。
1.(1)请求行:
请求行由三个部分组成,即:
方法 + URL + 版本。
方法
表示客户端的请求类型:
其中,GET和POST方法较为常见,但 GET 方法是最常用的 http 方法,常用于获取服务器的某个资源,比如在地址栏输入网址,或者在一些页面点击链接跳转的时候,大部分都是涉及 GET 方法。
值得注意的是,GET 方法一般是没有请求正文的。(除非开发写代码的时候故意构造 body 也可以)。所以,GET 想要给服务器传递数据的时候,往往就是通过 URL 的 路径 / query string 来进行传递了。
另外,POST方法在下面的场景会用到:
比如在某个网站登陆的时候,输入的用户名和密码,其中的请求正文(body)就包含了用户输入的用户名和密码;或者上传图片资源 / 文件的时候,body 里上传的文件的二进制数据有时候会通过 base64 编码,变成文本内容,这是为了让服务器好处理。
值得注意的是,POST方法是带有 body 的,通过 body 给服务器传递数据。
URL
URL 就是我们平时在地址栏输入的内容(俗称网址),它表示唯一资源定位符,描述了网络上的某个资源的具体位置。互联网上的每个文件都有一个唯一的 URL 。在一些情况下,我们在地址栏输入的内容可能并不是完整的 URL。比如,当我们只输入一个域名 “ baidu.com ” 时,浏览器会自动补全协议部分,通常默认使用 “https://”,然后形成完整的 URL 进行访问。
完整的 URL 包含的部分:
协议方案名:
比如 http 和 https 。
登录信息(认证):
由于现在的网站进行身份验证一般都不再通过 URL 进行了,一般都会省略。
服务器地址:
此处是一个 “域名”,域名会通过 DNS 系统解析成一个具体的 IP 地址。
服务器端口号:
上面的 URL 中的端口号被省略了,当端口号省略的时候,浏览器会根据协议类型自动决定使用哪个端口,例如 http 协议默认使用 80 端口,https 协议默认使用 443 端口。
带层次的文件路径:
指定服务器上资源的具体位置,以 / 分隔不同的目录和文件名。比如,你访问一个电商网站,最初进入的是首页,其 URL 可能是https://www.example.com/
,这是网站的根目录级别。当你点击进入某个商品分类页面,如https://www.example.com/category/electronics/
,这里的category/electronics/
就比首页的路径多了一个层级,它表示electronics
是category
文件夹下的一个子文件夹,用于存放电子产品分类相关的文件或页面信息。如果你再点击进入某个具体的商品详情页,如https://www.example.com/category/electronics/product123.html
,路径又多了一个层级,product123.html
表示具体的商品页面文件,它在electronics
子文件夹下,通过这种层层嵌套的路径结构,网站能够准确地定位和展示不同的页面和资源,让用户可以按照一定的逻辑浏览网站内容。
查询字符串(query string):
用于向服务器传递额外的参数信息,本质就是一个键值对的结构,通常以 ?开头,键值对之间用 & 分隔,键与值之间用 = 分割。
比如,我在浏览器输入 “hello”:
得到的 URL :
https://cn.bing.com/search?q=hello&qs=n&form=QBRE&sp=-1&lq=0&pq=hello&sc=12-5&sk=&cvid=F469659E942240769939E00F71E6A946
其中的 q = hello 就是用于向服务器传递其中的一个额外参数信息,参数名(q,qs,form......)一般由开发程序员自定义。
片段标识符:
标识网页的某个部分,实现“页面内跳转”功能,一般文档类的网站会有这个。
值得注意的是:
上述的 URL 这么多的部分,我们要重点关注 服务器地址 , 服务器端口,带层次的文件路径,查询字符串。
并且,URL 中只能包含特定的字符集合,包括字母、数字、一些特殊符号(如 -
、_
、.
、~
)以及保留字符(如 :
、/
、?
、#
等)。当 URL 中包含其他非 ASCII 字符或特殊字符(比如中文)时,就需要进行转义(一般使用utf - 8),以确保这些字符能在网络中正确传输和被服务器正确解析,避免出现歧义或错误。
例如我在搜索引擎输入 “你好,世界”,在 UTF-8 编码下,“你” 的十六进制编码是 E4 BD A0
,“好” 是 E5 A5 BD
,“,” 是 EF BC 8C
,“世” 是 E4 B8 96
,“界” 是 E7 95 8C
。再发送 http 请求的时候,query string的会有一部分是 q = %E4%BD%A0%E5%A5%BD%EF%BC%8C%E4%B8%96%E7%95%8C
。
版本
表示协议的版本。最广泛使用的版本是 HTTP /1.1
1、(2) 请求头:
每一行都是一个键值对,键与值之间用 “: ” 来分隔。由于 header 的 键(key)太多了,下面讲解一些比较重要的。
Host | 描述了访问的服务器的 IP(域名) 和 端口号 |
Content-Length | 描述了 body 的长度 |
Content-Type | 描述了 body 的数据格式 |
User-Agent | 标识客户端的类型和版本信息(如浏览器、操作系统),服务器可据此返回适配内容。 |
Referer | 通过这个字段,服务器可以知道用户是从哪个页面链接过来的 |
Cookie | 本质是浏览器在本地存储数据的一种机制 |
Host:
与 URL 里的服务器地址端口作校验。因为针对 https 来说,https 是会把 header 部分加密的。
Content-Length 和 Content-Type:
请求 / 响应 中存在 body 才会有这两个属性。
Content-Length可以解决粘包问题,在 TCP 缓冲区中,会有多个 https 的请求,如果有 body ,则 header 必然会有 Content-Length,从 body 开始的位置开始读取Content-Length个字节就可以了。
Content-Type 其中一种常见的格式比如 JSON ,服务器可以根据 Content-Type 决定 body 如何使用。
Referer:
不是所有的请求头都有这个字段(比如浏览器直接输入目的网址访问),例如,用户在百度上搜索某个关键词,然后点击搜索结果中的链接进入了我的网站,我的网站服务器就可以通过 Referer
字段获取到百度的搜索页面 URL,从而了解到用户是通过百度搜索进入的。
Cookie:
由服务器生成并发送到浏览器保存,通常包含键值对形式的数据(如user_id=12345
),当浏览器每次访问相同域名的网页时,会自动携带对应的Cookie发送给服务器。所以为什么在一些网站登录一次后,下次登录不用重新输入用户名和密码。
1、(3) 请求正文:
请求正文(Body)的格式由请求头的 Content-Type 字段决定,下面是 JSON 格式的例子:
{"key" : "value"............
}
2、http 响应:
状态行,响应头(header),空行,响应正文(body)。
例如:
不同颜色圈起来的四个部分,从上到下分别代表,状态码,响应头,空行,响应正文。
其中,空行是响应头结束的标记。
2、(1) 状态码:
以上红色圈起来的部分是要重要了解的状态码。
200:
状态码 200 代表 “OK”, 表示服务器成功处理了客户端的请求。
301:
永久重定向,当服务器接收到客户端的请求,发现请求的资源已经永久性地迁移到了另一个地址时,服务器会返回 301 状态码,并在响应头的 Location字段中指定新的 URL。客户端收到这个响应后,会自动使用Location
字段中的 URL 再次发起请求。简单理解就是服务器告诉客户端:“你要找的资源已永久搬家,以后请直接访问新地址!”(后续的请求都会被自动改成新的地址)。
302:
临时重定向,表明请求的资源只是临时位于新的 URL,服务器收到请求后,指示客户端应临时重定向到另一个 URL,客户端会自动向新的 URL 发送请求。
403:
表示访问被拒绝,有的页面通常需要用户有一定的权限才能访问(登陆后才能访问),如果用户没有登录直接访问,就容易见到 403。
404:
表示服务器无法找到客户端请求的资源。这意味着客户端请求的 URL 在服务器上不存在。
500:
表示服务器在处理请求时发生了内部错误。通常是由于服务器端的出现问题导致无法正常处理请求。
504:
当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会出现超时的情况。
2、(2) 响应头:
与 http 的请求头结构类似。
2、(3) 响应正文:
http 响应的 body 可能会包含 二进制数据,结构化数据(JSON ),文本类数据(HTML网页)。
比如上面例子的黄色圈起来的就是二进制的数据,在数据量大的时候,为了提高数据传输效率,节省网络带宽和传输时间,服务器也经常会对二进制数据进行压缩后再传输。
四、请求行 GET 和 POST 方法的区别:
GET 和 POST 方法其实没有本质区别,只是 http 的两个不同的方法,大部分情况下,使用 GET 的场景,也可以替换成 POST ,使用 POST 的场景,也可以使用 GET。只是在使用习惯上的区别而已。
如果非要讲出他们两个的区别,那就是GET 通常没有 body ,要通过 query string 传递数据给服务器,POST 通常由body,不需要 query string 传递数据。
网络上有个说法就是GET可以传输的最大数据量比 POST 小,这种说法是错误的,因为在 http 的官方文档中,并没有对 URL 的长度给出限制;网络上还有个说法就是GET传输的时候,query string 只能传输文本,不能传输二进制数据,这种说法也是错误的,因为 query string 可以通过 URL编码(urlencode)进行数据转换。
五、 https 协议:
前面说到,http 协议都是按照文本的方式明文传输的,这就会导致一个问题,那就是在传输的过程中会出现数据被篡改的情况。
比如:
我想下载一个 “天天动听音乐播放器” 。
再点击 “下载按钮 ”:
突然发现,他的这个下载名称链接,是 “QQ浏览器”的下载地址,这是怎么回事?
由于我们通过网络传输的任何数据包都会经过网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改,这种情况也就是运营商劫持。
点击“下载按钮”,其实就是在给服务器发送了一个 http 请求,获取到的 http 响应其实就是包含了该 APP 的下载链接。被运营商劫持后,发现这个请求是要下载 “天天动听音乐播放器” ,那么就自动把交给用户的响应给篡改成 “ QQ浏览器”的下载地址了。
画图解释:
运营商为什么要劫持?主要是利益关系,这里不细说。
现在运营商劫持的情况大幅减少,https 协议的广泛使用就是一个重要原因!
1、https 工作过程:
1、(1)对称加密:
生成一个密钥,明文到密文 和 密文到明文,都需要这个密钥来进行。对于 http 来说,对整个请求(首行,header,body)和响应(状态行,header,body)都进行加密。至于首行,虽然header的 Host 字段可以进行一定的校验,但攻击者仍然可能通过篡改首行的其他部分(如请求方法等)来进行恶意操作,无法保证整个请求的完整性和真实性。
一个服务器要给多个客户端提供服务,那么他们通信之间使用的密钥,不能都一样。所以,既然每个客户端的密钥都不一样,那么,就得有一方生成一个 “随机密钥”,这一方可以是服务器,也可以是客户端。生成密钥的一方需要通知另一方密钥是什么,就也得在网络通信中把密钥传输过去。这也就会有个问题,如果网络传输中间有黑客入侵了某个设备,黑客把密钥获取到了,也不行,有没有什么办法?
解决办法就是下面的非对称加密了。
1、(2)非对称加密:
非对称加密有两个密钥对,一个专门用来加密的,另一个专门用来解密的,公钥是所有人都知道。而私钥只有一方是知道的。引入非对称加密,就是为了解决传输对称密钥的问题,通过公钥对密钥加密,通过私钥对密钥解密。
图解:
公钥和私钥,是服务器生成的一个密钥对,私钥服务器自己持有,而公钥是公开的,所有人都可以知道。
上述图的流程,公钥把对称密钥加密后,传输给服务器,服务器通过私钥解密,得到密钥具体内容是 “888888”。这样,由于客户端和服务器双方都知道密钥的具体内容,之后的通信就可以使用密钥加密数据传输了。
由于上面的对称密钥传输的过程,黑客只能拿到公开的公钥,公钥只能用来解密,就无法知道加密后的具体对称密钥是什么了。
到这里,安全性还并不完美,还会有“中间人”攻击。
1、(3)中间人攻击:
首先,客户端向服务器询问公钥,服务器返回的公钥经过黑客入侵的设备,黑客自己生成一对公钥和私钥,黑客再把自己生成的 公钥 pub2 返回给客户端。
之后,客户端拿着 pub2 公钥对密钥进行加密,经过黑客入侵的设备,由于密钥是通过 pub2 来加密的,所以黑客拿着自己生成的私钥来对密钥进行解密,得到了对称密钥的具体内容,再通过pub1 加密密钥返回给服务器。服务器再通过自己的私钥解密获取到对称密钥具体内容。
上述可以看到,由于黑客在此过程中,得到了对称密钥,还是会有安全问题,怎么办?下面,引入证书就能解决“中间人”攻击的问题。
1、(4)通过证书解决“中间人”攻击:
引入证书,就是为了解决“中间人”攻击的问题,证书解决的核心问题,就是让客户端识别当前返回的公钥是服务器本身的,还是黑客伪造的。服务器一方的运营者会向公正机构获取证书,证书会包含的字段有:证书的发布机构,证书的有效期,证书的所有者,服务器的 ip/域名,服务器使用的公钥和私钥,数字签名。(数字签名可以理解公正机构对上面包含的内容计算的一个校验和,再使用自己的私钥加密)。
网络通信的时候,客户端询问服务器返回的就是证书,返回的证书,客户端会对证书的字段通过同样计算校验和的算法,计算得到一个校验和 check1 (客户端自己计算的),再使用公正机构的公钥来对证书的数字签名字段解密。得到 check2 (公证机构计算的)。
如果 check1 == check2 ,说明证书没有被篡改过,证书的公钥就是科学的(服务器的公钥)。
如果 check1 != check2,说明证书被篡改了(有可能篡改了证书里服务器的公钥),此时浏览器 / 客户端会弹出警告,显示说网站存在风险 / 证书不受信任。
注意:
1.上述的流程中,黑客如果篡改公钥,那么客户端计算的 check1 与 证书带有的 check2 会对不上,客户端 / 浏览器就会识别出来。
2.上述流程中,黑客能否自己搞一个证书,替换服务器的返回的整个证书?
答案是不能,证书包含了服务器的 ip / 域名,假如客户端想要访问百度,返回的证书却是其他的 ip / 域名,浏览器 / 客户端很容易识别出来。
3.黑客是否篡改公钥的同时,也把数字签名改了?
答案是不能,因为数字签名是通过公正机构的私钥来加密的,这个私钥只能用来加密,而黑客很难获取对应的公钥解密。因为公正机构公钥不是通过网络获取的,是内置在操作系统中的。
相关文章:
HTTP / HTTPS 协议
目录 一、前言: 二、Fiddler 抓包工具: 三、http 协议: 1、http 请求: 1.(1)请求行: 1、(2) 请求头: 1、(3) 请求正文: 2、http 响应: 2、(1) 状态码&#x…...
使用GRPO训练调度事件的语言模型!
参考:https://huggingface.co/blog/anakin87/qwen-scheduler-grpo 现在是2025年,在DeepSeek热潮之后,每个人都想使用GRPO训练自己的推理模型。 作为一名实践者,我也想这样做:仅使用提示和奖励来训练语言模型是一件非常…...
关于 js:9. Node.js 后端相关
一、Node 环境搭建与执行流程 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让 JS 不再局限于浏览器内,而是可以在服务器、终端、本地脚本中运行。 核心定位:让我们可以用 JS 写本地程序、脚本、爬虫、加密逻辑、hook 工具、…...
More Effective C++:改善编程与设计(上)
More Effective C: 目录 More Effective C: 条款1:仔细区别pointers和 references 条款2:最好使用C转型操作符 条款3:绝对不要以多态方式处理数组 条款4:非必要不要提供default constructor 条款5:对定制的“类型转换函数”保持警觉 …...
SCDN如何有效防护网站免受CC攻击?——安全加速网络的实战解析
在互联网安全威胁日益复杂化的今天,CC(Challenge Collapsar)攻击已成为网站运营者面临的主要挑战之一。这种攻击通过模拟大量合法用户请求,消耗服务器资源,导致正常用户无法访问。而**安全内容分发网络(SCD…...
关于并发编程AQS的学习
目录 1. AQS的核心作用 2. AQS的核心结构 3. 关键方法 4. AQS的应用示例 4.1、ReentrantLock的实现 4.2、CountDownLatch的实现 5. AQS的优势 6. 对比其他同步机制 前言 AQS(AbstractQueuedSynchronizer) 是Java并发编程中一个核心的同步器框架…...
16S18S基础知识(1)
相关内容: https://blog.csdn.net/weixin_34315189/article/details/86397125?fromshareblogdetail&sharetypeblogdetail&sharerId86397125&sharereferPC&sharesource2302_80012625&sharefromfrom_link https://metagenome.blog.csdn.net/art…...
Java Spring Boot 控制器中处理用户数据详解
目录 一、获取请求参数1.1 获取查询参数1.2 获取路径参数 二、处理表单提交2.1 处理表单数据 三、处理 JSON 数据3.1 接收 JSON 数据 四、返回 JSON 数据五、处理文件上传5.1 单文件上传5.2 多文件上传 六、总结 在 Spring Boot 应用开发中,控制器(Contr…...
AI产品上市前的“安全通行证“
首席数据官高鹏律师团队 如今AI 产品如雨后春笋般涌现,从智能音箱到自动驾驶汽车,从语音助手到医疗诊断软件,它们正全方位渗透进我们的生活。然而,在 AI 产品迈向市场、走进千家万户之前,有一系列强制性安全认证如同坚…...
sql server 2019 将单用户状态修改为多用户状态
记录两种将单用户状态修改为多用户状态,我曾经成功过的方法,供参考 第一种方法 USE master; GO -- 终止所有活动连接 DECLARE kill_connections NVARCHAR(MAX) ; SELECT kill_connections KILL CAST(session_id AS NVARCHAR(10)) ; FROM sys.dm_ex…...
[滑动窗口]越短越合法(可转化成越长越合法)
题目链接 题意 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于k 的连续子数组的数目。 首先当ans增加时 我们认为r固定 方法一、转化成越长越合法 思路 算出乘积 ≥ k \ge k ≥k的子数组数量 再用所有子数组数量减去上面算出来…...
idea中编写spark程序
### 在 IntelliJ IDEA 中配置和编写 Spark 程序 要在 IntelliJ IDEA 中高效地开发 Spark 程序,需要完成一系列必要的环境配置以及项目搭建工作。以下是详细的说明。 --- #### 1. 安装与配置 IntelliJ IDEA 为了确保 IDE 可以支持 Scala 开发,首先需要…...
机器学习入门(一)
机器学习入门(一) 文章目录 机器学习入门(一)一、机器学习分类1.1 监督学习1.2 半监督学习1.3 无监督学习1.4 强化学习 二、scikit-learn工具介绍scikit-learn安装 三、数据集3.1 sklearn玩具数据集介绍3.2 sklearn现实世界数据集…...
力扣每日一题之移动零
题目说明: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 思路分析:我们可以考虑使用双指针来解答该题。双指针分…...
GaiaEx 盖亚:从合规出发,一家新兴交易平台的全球化路径探索
在加密货币交易平台日益激烈的竞争中,监管趋严、安全要求提升、用户体验优化已成为行业发展的三大核心议题。2025年初正式上线的GaiaEx 盖亚交易所,正是在这一市场背景下,以“合规 产品 生态”的多维路径,逐步建立起自身的发展方…...
车载网关--- 职责边界划分与功能解耦设计
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
EasyRTC嵌入式音视频通信SDK打造带屏IPC全场景实时通信解决方案
一、方案概述 在智能安防与物联网快速发展的背景下,带屏IPC(网络摄像机)不仅承担着视频采集与监控的基础功能,还逐渐向多样化交互与智能化方向演进。EasyRTC作为一款强大的实时通信框架,具备低延迟、高稳定性、跨平…...
STM32入门笔记(05):内部高速8Mhz时钟最大时钟可以设置 64 Mhz?如何修改system_stm32f10x.c里面的代码?
6.2 Clocks 最大系统时钟频率 当 STM32F103 系列仅使用内部高速振荡器(HSI,8 MHz)作为时钟源,并通过 PLL 放大时,最大可达 64 MHz。([forum.mikroe.com][1], [keil.com][2]) HSI 被内部除以 2(即 4 M…...
iOS 阅后即焚功能的实现
iOS阅后即焚功能实现步骤 一、功能设计要点 消息类型支持:文本、图片、视频、音频等。销毁触发条件: 接收方首次打开消息后启动倒计时。消息存活时间可配置(如5秒、1分钟)。 安全要求: 端到端加密(E2EE&a…...
二叉树前中后序遍历统一迭代法详解:空标记法与栈操作的艺术
二叉树的 前序、中序、后序 遍历是算法中的经典问题。递归实现简单直观,而迭代法则能更好地理解栈的操作逻辑。前文中(中序,前序与后序)所讲过传统的迭代法需要为每种遍历设计不同的入栈顺序,但 统一迭代法 通过引入 空标记节点&a…...
Spark 集群配置、启动与监控指南
Spark 集群的配置和启动需要几个关键步骤。以下是完整的操作流程,包含配置修改、集群启动、任务提交和常见错误排查方法。 1. 修改 Spark 配置文件 首先需要编辑 Spark 配置文件,设置集群参数: bash # 进入 Spark 配置目录 cd $SPARK_HOM…...
综述:拓扑材料的热磁性质
Adv. Funct. Mater. 2025, 2506631 https://doi.org/10.1002/adfm.202506631 近年来,越来越多的拓扑材料表现出优异的热磁(TM)性能,其显著的双极效应和线性能带带来的高载流子迁移率改善了这种性能。 本文综述了TM输运理论、基于…...
lanqiaoOJ 652:一步之遥 ← 扩展欧几里得定理
【题目来源】 https://www.lanqiao.cn/problems/652/learning/ 【题目背景】 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 【题目描述】 从昏迷中醒来,小明发现自己被关在X星球的废矿车里。矿车停在平直的废弃…...
双目云台摄像机:双摄安防功能全方位
双目云台摄像机是一种具有革命性设计的云台摄像机设备,其核心在于其独特的双摄像头配置。以下是对这种先进安防设备的详细介绍: 一、核心原理 双目云台摄像机的核心原理在于利用两个摄像头从不同角度捕捉同一场景,通过先进的算法计算两个图…...
Linux - 基础指令
目录 linux下基本指令 ls pwd cd touch mkdir rmdir rm man cp mv cat more less head tail | 匿名管道 find 指令 which alias grep zip/unzi rz/sz tar 重要的⼏个热键 学习linux操作系统,学习指令是必不可少的 尽管有图形化的linux操作系统供学者学习&am…...
深圳无人机展览即将开始,无人机舵机为什么选择伟创动力
深圳无人机展览即将开始,无人机舵机为什么选择伟创动力 2025年5月23日至25日,伟创动力(Kpower)将携旗下多款高性能舵机及微型驱动系统方案亮相2025国际低空经济与无人系统博览会(深圳无人机展),全面展示其在无人机、机…...
ajax提交form表单数据举例
目录 一、HTML 表单准备二、JavaScript 文件(form.js)三、服务器端处理(Spring Boot 示例)四、运行和测试五、总结在现代 Web 开发中,为了提供更流畅、无需页面刷新的用户体验,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于提交表单数据。本文将通过一个具体…...
IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选
环境描述 IDEA 2025.1.1JDK17Maven 3.9.9 问题描述 IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选,可以看到此时的最高版本为 3.0.2: 问题分析 返回上一步,可以发现 Spring Initializr 的服务地址为阿里云&#…...
下载的旧版的jenkins,为什么没有旧版的插件
下载的旧版的jenkins,为什么没有旧版的插件,别急 我的jenkins版本: 然后我去找对应的插件 https://updates.jenkins.io/download/plugins/ 1、Maven Integration plugin: Maven 集成管理插件。 然后点击及下载成功 然后 注意&…...
java连数据库
一、准备工作 安装MySQL数据库 确保已安装MySQL服务器并启动服务 下载JDBC驱动 官方驱动:MySQL Connector/JMaven依赖: <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactI…...
常见排序算法及其java实现
常见排序算法 一、冒泡排序(Bubble Sort)二、选择排序(Selection Sort) 三、插入排序(Insertion Sort)四、快速排序(Quick Sort) 五、归并排序(Me…...
【Python 算法零基础 2.模拟 ④ 基于矩阵】
目录 基于矩阵 Ⅰ、 2120. 执行所有后缀指令 思路与算法 ① 初始化结果列表 ② 方向映射 ③ 遍历每个起始位置 ④ 记录结果 Ⅱ、1252. 奇数值单元格的数目 思路与算法 ① 初始化矩阵 ② 处理每个操作 ③ 统计奇数元素 Ⅲ、 832. 翻转图像 思路与算法 ① 水平翻转图像 ② 像素值…...
2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2)
2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2) 序号过程过程组9.1规划资源管理规划9.2估算活动资源规划9.3获取资源执行9.4建设团队执行9.5管理团队执行9.6控制资源监控 文章目录 2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2…...
IEEE802.16 标准介绍
IEEE802.16 标准又称为IEEE Wireless MAN 空中接口标准,对工作于不同频带的无线接入系统空中接口进行了规范。由于它所规定的无线系统覆盖范围在公里量级,因此802.16 系统主要应用于城域网。 根据使用频带高低的不同,802.16 系统可分为应用于…...
Nginx配置与应用案例详解
Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,广泛用于负载均衡、静态资源托管和动态内容转发。以下是对 Nginx 配置的详细解析及常见应用场景案例。 一、Nginx 配置文件结构 Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,包含以下核心模块: 全局块 (Main Contex…...
Hadoop-HDFS-Packet含义及作用
在 HDFS(Hadoop Distributed File System)中,Packet 是数据读写过程中用于数据传输的基本单位。它是 HDFS 客户端与数据节点(DataNode)之间进行数据交互时的核心概念,尤其在写入和读取文件时,Pa…...
作业帮Android面试题及参考答案
简单描述 Java 类加载机制 Java 类加载机制是将类的字节码载入 JVM 并生成对应的 Class 对象的过程,主要包括以下几个阶段。 加载是类加载的第一个阶段,通过类的全限定名来获取其字节码流,然后将字节码流解析成方法区中的运行时数据结构&…...
分布式1(cap base理论 锁 事务 幂等性 rpc)
目录 分布式系统介绍 一、定义与概念 二、分布式系统的特点 三、分布式系统面临的挑战 四、分布式系统的常见应用场景 CAP 定理 BASE 理论 BASE理论是如何保证最终一致性的 分布式锁的常见使用场景有哪些? 1. 防止多节点重复操作 2. 资源互斥访问 3. 分…...
如何下载 MySQL 驱动 JAR 包
下载 MySQL 驱动 JAR 包的 4 种方式: 官网下载:从 MySQL 官网 下载对应版本的 ZIP 包Maven:在 pom.xml 添加 mysql-connector-java 依赖Gradle:在 build.gradle 使用 implementation mysql:mysql-connector-java:8.0.x直接下载&a…...
unordered_map和unordered的介绍和使用
目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 unordered_map的定义方式 unordered_map接口的使用 unordered_map的容量 unordered_map的迭代器 unordered_map的元素访问 unordered_map的查询 unordered_map的修改操作 unordered_multimap u…...
【原创】使用阿里云存放一个临时共享的文件
在某些场合,需要临时将一个文件存储到一个可被公网访问的地方,某个服务需要访问一下这个文件。这个文件基本上就是一次寿命,也就是你上传一下,然后被访问一下,这个文件的寿命就结束了。 对于这种需求,自建…...
C++学习细节回顾(汇总二)
一.初始化列表相关 1.初始化顺序受申明顺序影响 2.在必要时可以部分不采用初始化列表,避免受特性1影响 二.非类型模板参数 template< class T , size_t N 10 > 三.特化–特殊化处理 template< class T > bool less(T left , T right) { return left&…...
【行为型之访问者模式】游戏开发实战——Unity灵活数据操作与跨系统交互的架构秘诀
文章目录 🧳 访问者模式(Visitor Pattern)深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码(游戏物品系统)1. 定义元素与访问者接口2. 实现具体元素类3. 实现具体访问者4. 对象结构管理5. 客户端使用 …...
ubuntu系统安装配置adb工具
获取adb tools 1. 下载最新版(替换链接中的版本号) wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip2. 解压到当前目录 unzip platform-tools-latest-linux.zip3. 移动文件到系统目录 sudo mv platform-tools /usr/…...
基于Python的量化交易实盘部署与风险管理指南
基于Python的量化交易实盘部署与风险管理指南 一、模拟交易与参数优化 1.1 券商API接入与模拟交易 在量化交易落地前,模拟交易是策略验证的“安全沙箱”,其核心价值在于用零成本环境暴露策略缺陷。以股票市场为例,同花顺与通达信模拟盘接口…...
MySQL 入门大全:数据类型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
WPF Datagrid 数据加载和性能
这篇文章并非讨论 WPF Datagrid 的性能数据,而只是简单介绍一下为了使其性能良好,你需要注意哪些方面。我不太想使用性能分析器来展示实际数据,而是尽可能地使用了 Stopwatch 类。这篇文章不会深入探讨处理海量数据的技术,例如分页…...
商城小程序源码介绍
今天要为大家介绍一款基于ThinkPHP、FastAdmin以及UniApp开发的商城小程序源码,这款源码在设计和功能上都有不俗的表现,非常适合想要搭建线上商城的开发者。 该源码采用了ThinkPHP作为后端框架,利用其强大的性能和灵活性,保障了系…...
【大模型】OpenManus 项目深度解析:构建通用 AI Agent的开源框架
OpenManus 项目深度解析:构建通用 AI Agent的开源框架 一、项目概述项目特点 二、项目运行方式与执行步骤(一)环境准备方法 1:使用 conda方法 2:使用 uv(推荐) (二)配置&…...
数据科学和机器学习的“看家兵器”——pandas模块 之一
目录 pandas 模块介绍 4.1 pandas 数据结构 一、课程目标 二、Series 对象介绍 三、DataFrame 对象介绍 四、Series 和 DataFrame 在具体应用中的注意事项 (一)Series 注意事项 (二)DataFrame 注意事项 五、实战案例 案例 1:学生成绩分析 案例 2:销售数据分析 案例 3:股…...