网络原理3-应用层(HTTP/HTTPS)
目录
- DNS
- HTTP/HTTPS
- HTTP协议报文
- HTTP的方法
- 请求报头、响应报头(header)
- 状态码
- 构造HTTP请求
- HTTPS
应用层是我们日常开发中最常用的一层,因为其他层:传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的,我们只能使用人家的。应用层我们可以使用别人已经创建好的协议(HTTP等),也可以自己定义应用层协议
自定义应用层协议要做的事情:
1、明确前后端交互的过程中,需要传递哪些信息
2、明确组织这些信息的格式,前后端要是同一种方式
网络通信常见的数据格式有:xml、JSON、yml
1、xml
采用成对的标签,类似于HTML,但是xml的标签可以自定义,例如 < userID > 1011< userID/>
2、JSON
采用键值对的形式,键和值使用冒号分开,例如 {“userID”:1011,“username”:“zhangsan”}
3、yml
强制了数据组织的格式,要求键值对必须占据一行
DNS
DNS是一个应用层协议,DNS就是域名解析系统。域名对应一个或者多个IP地址,或者多个域名对应一个IP地址。由于IP地址不方便记忆并且不能显示地址组织的名称和性质,人们设计出了域名,并通过域名系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串,把域名转换成IP地址,这样的系统就叫域名解析系统。
当某个电脑需要进行域名解析,直接会访问DNS服务器。全世界有非常多设备上网,一个服务器是顶不住的,所以有了镜像服务器。当服务器数据有变更,只需要修改基准的服务器(也叫根服务器),其他镜像服务器从根服务器中同步数据。
HTTP/HTTPS
HTTP全称:HyperTransferProtocol,超文本传输协议,这里的文本指的是字符串,而超文本是在文本的基础上的扩展,也就是说,HTTP不仅可以传输文本,也可以传输图片、音频等其他数据,HTTP是最广泛使用的应用层协议。HTTPS可以认为是HTTP的升级版,安全性比HTTP高。除了安全性外,其他部分都是一样的。HTTP是一问一答模型的协议,客户端发一个请求,服务器就返回一个响应。
HTTP应用场景:
1、使用浏览器,打开网页
2、打开手机App,加载相关的信息
3、服务器之间的调用,大概率也是使用的HTTP
现在HTTP已经更新至3.0版本,3.0基于UDP,但是我们最常使用的还是HTTP/1.1(基于TCP)
HTTP协议报文
在学习HTTP协议报文格式前,我们可以借助抓包工具,来了解HTTP请求响应的详细情况。
选择Fiddler进行抓包
下载网址
选择Fiddler Classic
选择Try For Free
邮箱随便填一个,国家随便填一个,然后点击Download For Windows
打开软件后
点击Tools,然后点击Options
点击HTTPS,以上4个选项全部勾选,
工具的使用:
在使用前,先选中左边,ctrl+a+delete清除列表
然后再随便打开一个网页,在网页中点击刷新,这里拿CSDN网页举例
此时,会显示抓取到的数据报列表,双击CSDN的数据报列表
右上方部分是请求,右下方部分是响应
选择Raw,此时列出的是原始的HTTP请求
如果想要更清楚的观察,可以点击View in Notepad,在记事本中打开
但是响应的文本显示的是乱码,因为这里的数据是压缩后的二进制数据
此时点击如下按钮即可
很容易发现,响应其实就是HTML
HTTP协议的请求:
1)首行
GET https://www.csdn.net/ HTTP/1.1
GET表示HTTP请求的方法(method) ,中间部分是URL,表示访问的资源,HTTP/1.1指的是HTTP的版本是1.1版本
2)请求头(红框框)部分
请求头的每一行都是一个键值对,键和值用冒号分割。
3)空行(请求头的结束标记)
4)正文(body)
有的请求是没有body的,有的有body
如抓取gitee
HTTP请求的基本格式
HTTP协议的响应
1)首行
HTTP/1.1 200 OK
HTTP/1.1表示版本,200表示状态码,OK是状态码的描述
2)响应头
响应头的每一行也是一个键值对,键值对之间用冒号分割
3)空行
4)正文(body)
响应的正文通常是HTML、CSS、JS等
HTTP响应的基本格式:
URL
URL是唯一资源定位符,网络上的资源可以是一个网页、一个图片、一个文件
协议名://ip地址:端口号/带层次的路径/资源名称?查询字符串#片段标识符
协议方案名:指使用的是哪种协议
登录信息:进行身份认证,现在已经见不到了
服务器地址:要访问的资源的服务器地址,可以是IP也可以是域名
服务器端口号:IP是确定唯一的主机,端口号是确定主机上的程序,如果不写端口号,浏览器会根据协议类型,自动分配端口,如果是HTTP,端口号是80,如果是HTTPS,端口号是443
带层次的文件路径:确定服务器上的具体资源,
查询字符串:查询字符串是程序猿自定义的键值对结构,是针对访问的资源进行补充说明,键值对之间使用&分割,键和值之间使用=分割,等号两边不能有空格
片段标识符:标识页面中的某个部分,常见于文档类文件。例如某个文档网站中,点开目录,每个章节会对应一个片段标识符
URL encode:
查询字符串是键值对结果,但是它的值里面可能包含特殊符号,而URL中有的特殊符号是有重要意义的,如果值出现了特殊符号,在解析的时候可能会出现问题,所以需要转义,URL encode的作用就是把这些特殊意义的字符进行转义。
例如,在浏览器搜索c++,
此处把 + 字符转义成 %2B 了
转义规则:把要转义的字符或者汉字,每个字节以16进制的形式表示出来,然后给每个字节前面加上%
例如,在浏览器中搜索 你好,复制地址栏的URL
得到如下内容
https://cn.bing.com/search?q=%E4%BD%A0%E5%A5%BD&qs=n&form=QBRE&sp=-1&lq=0&pq=%E4%BD%A0%E5%A5%BD&sc=10-2&sk=&cvid=A7357277519D4F10A61D2542BB754587&ghsh=0&ghacc=0&ghpl=
根据utf编码查得你好这两个字的16进制编码
HTTP的方法
方法描述了HTTP请求的动作想要干什么,HTTP的方法如下
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0 、1.1 |
POST | 传输实体主体 | 1.0 、1.1 |
PUT | 传输文件 | 1.0 、1.1 |
HEAD | 获取报文首部 | 1.0 、1.1 |
DELETE | 删除文件 | 1.0 、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINK | 断开连接关系 | 1.0 |
常用的方法有GET、POST,重点掌握这两个
**GET:**直接在浏览器中输入一个URL,就会触发GET请求
打开Fiddler,在CSDN主页,按住Ctrl点击刷新,Fiddler会获取到如下的内容
这里说明了,访问一个网页并不是一个HTTP请求就能完成的,而是需要多个HTTP请求得到的结果。
上述带有csdn的都是这个页面触发的请求,其实就是css文件、JavaScript文件、图片文件、字体文件等,在你的浏览器第一次访问这个网页时,会把这些资源保存到你的电脑上,以后再访问的时候就不需要再次获取这些内容了,这个机制就叫浏览器缓存,这样的机制加快了页面展示速度,节省服务器宽度。直接点击刷新,是从缓存中读取数据,按住Ctrl再点刷新可以强制忽略缓存,重新从服务器读取数据。
POST
通常出现在登录、注册以及上传文件的场景
例如,登录Gitee的请求:
POST和GET的区别:
首先,这两个方法没有本质区别,POST能用的GET也能用,但是在使用习惯上有区别
1、语义不同:一般来说,GET用于表示从服务器获取数据,POST表示提交数据给服务器。
2、传递数据的方式不同:一般来说,GET传递数据,通过是通过query string,把自定义的数据提交给服务器;POST是通过body把自定义数据交给服务器。
3、GET方法对应的请求,通常设计成幂等的,POST方法对幂等性没有要求。幂等: 是其任意多次执行所产生的影响均与一次执行的影响相同,(牛今天吃草,今天挤出来的是奶,明天吃草明天挤出来的也是奶,结果非常稳定,就是幂等的,如果今天吃草今天挤出来的是史,那就是不幂等)。这个区别在今天不是非常合适了,实际开发中还是需要看具体的业务要求,但是http标准文档中建议这么做
4、GET如果设计成幂等性,此时GET的结果可以缓存,POST不设计成幂等性一般不会缓存
请求报头、响应报头(header)
header是键值对格式的,常见的报头:
1、Host:
表示服务器主机的地址和端口
2、Content-Length、Content-Type:
Length表示body中数据的长度,单位字节,Type表示body中数据的格式。如果请求、响应中没有body,也就没有这两个字段。HTTP是基于TCP的(1.1版本),TCP是面向字节流,存在粘包问题,有了Length、Type就能知道HTTP数据包从哪开始从哪结束。Content-Length和Content-Type在响应和请求中都会存在
常见的Content-Type的取值:
Content-Type:text/html;charset=utf8
Content-Type:text/css
Content-Type: application/javascript;charset=utf8
Content-Type: application/jason
3、User-Agent
例如:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
主要包含了操作系统信息(版本)和浏览器信息(版本),表述了你用的什么设备上网
4、Referer
描述了当前页面是从哪个页面跳转过来的,例如,在搜狗搜索主页中搜索哔哩哔哩,打开哔哩哔哩的主页
5、Cookie
Cookie也是键值对结构的,使用;分割键值对,使用=分割键和值,键值对的含义是程序员自定义的
Cookie是浏览器给网站提供的一种“客户端存储数据”的机制
浏览器禁止网页直接访问咱们的硬盘,但是浏览器允许网页通过键值对的方式存储数据,这样的键值对数据是浏览器负责存储到咱们的硬盘中,网页不能干涉。
浏览器在第一次访问某个网站时,浏览器中可能没有Cookie,服务器返回的响应会带有Set-Cookie,Cookie中的键值对就会写到浏览器中,浏览器收到Cookie就会存储到本地硬盘中。接下来浏览器访问网站时,就会带有Cookie
如何查看Cookie?
可以选择删除Cookie,删除之后本地存储的Cookie也会删除掉,在下一次访问这个网站时,服务器返回的响应会带有Set-Cookie,浏览器会根据这个重新存储Cookie。
总结:
Cookie是什么?
浏览器本地持久化存储数据的机制,按照键值对方式存储,键值对内容程序员可以自定义,按照域名为维度分别进行存储,每个网站都有自己的Cookie,互不影响。
Cookie从哪里来?
服务器返回的响应数据中会包含Set-Cookie字段。
Cookie到哪里去?
Cookie虽然会存储到本地,但是目的并不如此,存储好之后,后续浏览器再次访问同一个网站的服务器时,会把之前存储的Cookie带上,发送给服务器。为什么发回来还要再发回去?Cookie中的数据在客户端中需要使用到,在服务器这边也要使用到。
Cookie中存储的键值对是程序员自己定义的
Cookie经典使用场景:
总结:
常见的HTTP响应头属性:
- Content-Type: 指定返回的资源的MIME类型。
- Content-Length: 指定返回的资源的长度,单位是字节。
- Cache-Control: 控制响应的缓存行为。
- Connection: 控制持久连接。
- Date: 消息发出的时间。
- ETag: 资源的版本/修订号。
- Expires: 资源的过期时间。
- Last-Modified: 资源最后被修改的时间。
- Server: 服务器软件名称。
- Set-Cookie: 设置客户端的cookie。
- WWW-Authenticate: 用于HTTP认证。
- Access-Control-Allow-Origin: 跨域资源共享(CORS)策略。
- X-Frame-Options: 控制资源是否可以在iframe中显示。
- Content-Disposition: 控制内容的下载方式。
- Content-Encoding: 指定内容的编码格式。
- Content-Language: 指定内容的语言。
- Content-Security-Policy: 定义了网页的资源加载策略。
- Strict-Transport-Security: 告诉浏览器仅通过HTTPS连接。
- X-Content-Type-Options: 防止MIME类型混淆攻击。
- X-XSS-Protection: 启用浏览器的XSS过滤和阻断功能。
- Location: 用于重定向的URL。
- Retry-After: 告诉客户端在多长时间后再次发起请求。
- Vary: 告诉缓存服务器何时需要重新请求。
- Accept-Ranges: 指定服务器是否支持范围请求。
- Allow: 指定允许的HTTP方法。
- Cross-Origin-Embedder-Policy: 控制跨源嵌入策略。
- Cross-Origin-Opener-Policy: 控制跨源窗口行为。
- Cross-Origin-Resource-Policy: 控制跨源资源的加载策略。
常见的HTTP请求属性:
- Accept: 客户端能够处理的媒体类型。
- Accept-Language: 客户端能够接受的语言。
- Accept-Encoding: 客户端能够接受的编码格式。
- Authorization: 客户端发送的认证信息。
- Cache-Control: 客户端的缓存指令。
- Connection: 控制持久连接。
- Content-Length: 请求体的长度。
- Content-Type: 请求体的媒体类型。
- Cookie: 客户端发送的cookie信息。
- Host: 请求的服务器域名和端口。
- Origin: 请求的源。
- Referer: 请求的来源URL。
- User-Agent: 客户端的用户代理信息。
- X-Requested-With: 通常用于标识Ajax请求。
请求头用于向服务器提供额外的信息,以帮助服务器正确处理请求。
状态码
状态码表示访问一个页面请求是否成功,以及请求失败的原因
常见的状态码:
200 OK : 表示成功
404 Not Found :表示浏览器根据url访问的资源在服务器上没有找到,url的路径不对
403 Forbidden :访问被拒绝(没有权限)
405 Method Not Allowed :方法不支持
500 Internal Server Error :服务器内部错误,一般是服务器端代码出bug,抛出异常但是没有catch
504 Gateway Timeout :超时,响应没有在规定时间内返回
302 Found :重定向,访问A网站时会自动跳转到B网站,此时响应中返回的状态码就是302,并且在响应头中Location属性(包含B网站的地址)。浏览器收到302状态码后会自动跳转到Location中的网站。
构造HTTP请求
使用工具Postman,下载链接
点击next
这样就可以自己构造HTTP请求了
HTTPS
HTTP协议内容是以文本的形式明文传输,传输的数据容易被黑客、运营商劫持和篡改,HTTPS在HTTP的基础上,引入了加密机制,解决了上述的问题。
明文:传输的原始数据
密文:对明文进行加密后的数据
加密:明文–>密文
解密:密文–>明文
密钥:进行加密、解密的工具
对称加密:加密和解密都使用同一个密钥
非对称加密:使用一对密钥,使用A加密就使用B解密,使用B加密则使用A解密。这两个密钥一个公开一个私藏,公开的叫公钥,私藏的叫私钥。
关于HTTPS的工作过程:
这里只介绍加密过程,因为HTTPS是在HTTP基础上引入了加密机制,其他内容都是一样的。
未加密:客户端明文传输数据,很容易被黑客入侵,获取到请求的内容,并进行篡改
1、引入对称加密
一个服务器对应多个客户端,每个客户端的密钥都不同,要求每个客户端连上服务器的时候自己随机生成一个对称密钥,服务器拿到这个密钥才能进行解密,因此密钥也需要进行传输。
但是,密钥是明文传输的,黑客很容易获取到密钥。
2)引入非对称加密:
通过非对称加密,对要传输的密钥进行加密,而传输的数据还是使用对称加密。
上述流程看似安全,实则存在缺陷
3)引入证书
问题的关键是,能让客户端辨别出拿到的公钥是不是正确的。如何证明公钥是正确的?引入第三方公证机构,想搭建服务器,使用HTTPS,就需要在公证机构申请证书。申请证书时就要向机构提供信息:网站的域名,备案号,公钥等,公证机构根据这些信息生成一个证书(电子版),证书的内容包含了证书发布机构、证书有效期、公钥、证书所有者、签名等。签名则是保证证书合法性的重要内容。
服务器申请到证书后,后续客户端从服务器拿公钥,就不是拿公钥,而是拿整个证书。客户端可以根据证书的签名来验证证书的合法性。
签名的生成:校验和+加密,把证书中的所有字段综合在一起计算校验和,然后公证机构生成一对公钥私钥,公证机构持有私钥,公钥分发给客户端,公证机构拿着私钥对校验和进行加密得到数字签名。数字签名其实就是加密后的校验和。
客户端验证数字签名:
1、客户端把证书中各个字段再计算一次校验和,得到checksum1
2、客户端使用公证机构发的公钥对数字签名进行解密得到checksum2
3、比较,如果checksum1==checksum2证明当前证书和服务器发出的证书是一样的,如果checksum1!=checksum2,说明证书的内容被黑客篡改过。
客户端手里的公证机构的公钥是操作系统内置的,而不是通过网络获取的,所以不存在公证机构的公钥是黑客伪造的。
另外黑客不能做到:篡改数据后,让数字签名解密出来的checksum1和篡改后的checksum2相等,因为黑客篡改数据后需要使用公证机构的私钥来加密。如果黑客自己生成一个私钥,这时客户端拿着公证机构的公钥,也解密不了。
总结:HTTPS工作流程
1、引入对称加密
2、传输对称密钥
3、对 对称密钥进行加密,引入非对称加密
4、中间人攻击
5、引入证书,解决中间人攻击
相关文章:

网络原理3-应用层(HTTP/HTTPS)
目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层,因为其他层:传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的,我们只能使用…...

JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍
文章目录 一、内存结构图二、堆的定义三、堆内存溢出四、堆内存排查工具 一、内存结构图 二、堆的定义 1、通过new关键字创建的对象,都会放到堆空间中。 2、它是线程共享的,堆中的对象都要考虑线程安全问题。 那有同学肯定会问,方法内通过n…...

【Python语言初识(六)】
一、网络编程入门 1.1、TCP/IP模型 实现网络通信的基础是网络通信协议,这些协议通常是由互联网工程任务组 (IETF)制定的。所谓“协议”就是通信计算机双方必须共同遵从的一组约定,例如怎样建立连接、怎样互相识别等,…...

使用root账号ssh登录虚拟机ubuntu
在C:\Users\Administrator\.ssh目录下的config中,添加ubuntu会在根目录中,建立一个root文件夹。在该文件夹中建一个.ssh目录。像免密登录ubuntu设置中,把公钥考进去。在vscode中打开文件夹中选择要打开的文件夹,就可以不需要在ubu…...

五子棋双人对战项目(1)——WebSocket介绍
目录 一、项目介绍 如何实现实时同步对局? 二、WebSocket 1、什么是WebSocket? 2、WebSocket的报文格式 opcode payload len payload data 3、WebSocket握手过程 4、WebSocket代码的简单编写 三、WebSocket 和 HTTP的关系 1、相同点…...
rabbitMq------信道管理模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言信道管理的字段申明/删除交换机申明/删除队列绑定/解绑消息的发布消息确认订阅队列取消订阅信道内存管理类打开信道关闭信道/获取指定信道 总结 前言 信道是在…...

如何只用 CSS 制作网格?
来源:how-to-make-a-grid-like-graph-paper-grid-with-just-css 在看 用于打印到纸张的 CSS 这篇文章时,对其中的网格比较好奇,作者提供了 stackoverflow 的链接,就看到了来源的这个问题和众多回复。本文从里面挑选了一些个人比较…...

Linux安装RabbitMQ安装
1. RabbitMQ介绍 1.1 RabbitMQ关键特性 异步消息传递:允许应用程序在不直接进行网络调用的情况下交换消息。 可靠性:支持消息持久化,确保消息不会在系统故障时丢失。 灵活的路由:支持多种路由选项,包括直接、主题、…...
SpringBoot驱动的社区医院信息管理平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理社区医院信息平台的相关信息成为必然。开发…...
MyBatis-Plus如何分页查询?
MyBatis-Plus提供了一种简单而强大的分页查询功能,可以通过使用Page对象和Mapper接口中的方法来实现。以下是分页查询的基本步骤: 添加分页插件依赖 确保你的项目中已经添加了MyBatis-Plus的分页插件依赖。 <dependency><groupId>com.bao…...

云原生之容器编排实践-OpenEuler23.09离线安装Kubernetes与KubeSphere
背景 有互联网的日子确实美好,不过有时候,仅仅是有时候,你可能会面临离线部署 Kubernetes 与 KubeSphere 集群的要求。。 我们借助由青云开源的容器平台, KubeSphere 来进行可视化的服务部署。 KubeSphere 是在 Kubernetes 之上…...

构建企业数字化转型的战略基石——TOGAF框架的深度解析
数字化时代的企业变革需求 在全球范围内,数字化转型已成为企业提高竞争力、优化运营流程、提升客户体验的核心战略。数字技术的迅猛发展,不仅改变了传统行业的运作模式,也迫使企业重新思考其业务架构和技术基础设施。TOGAF(The O…...

docker -私有镜像仓库 - harbor安装
文章目录 1、镜像仓库简介2、Harbor简介3、下载与安装3.1、下载3.2、安装3.2.1、上传harbor-offline-installer-v2.8.2.tgz到虚拟机中解压并修改配置文件3.2.2、解压tgz包3.2.3、切换到解压缩后的目录下3.2.4、准备配置文件3.2.5、修改配置文件 4、启动Harbor5、启动关闭命令6、…...
头号积木玩家——软件工程专业职业生涯规划报告
说明:本报告为博主在浙江科技学院(现浙江科技大学)就读软件工程本科专业时,在必修课程《计算机导论》中撰写的报告。(报告主体2021年11月定稿,有删改) 标题说明:在电影《头号玩家》…...

Redis(初步认识和安装)
初识Redis 认识NoSQLSQL结构化:structure关联的:RelationalSQL查询ACID NoSQL非结构化无关联的非SQLBASE 认识Redis安装Redis 认识NoSQL SQL和NoSQL比较 SQL 结构化:structure 数据库中表的字段都有固定的结构 关联的:Relati…...

计算机网络:计算机网络概述:网络、互联网与因特网的区别
文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络,若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…...

网络编程套接字TCP
前集回顾 上一篇博客中我们写了一个UDP的echo server,是一个回显服务器:请求是啥,响应就是啥 一个正常的服务器,要做三个事情: 读取请求并解析根据请求,计算响应把响应写回到客户端 DatagramPacket res…...
Git
Git-2.34.1-64-bitGit-2.34.1-64-bitTortoiseGit-2.4.0.2-64bitTortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN 下载Git-2.34.1-64-bit、TortoiseGit-2.4.0.2-64bit、TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN,依次安装。 # 配置本地Git的用户名与邮箱 git c…...

【日常记录】现在遇到的Y7000P亮度无法调节问题,无需改动注册表进行调整的方法。
1、winR 2、输入:services.msc 3、找到下面红框内的服务 4、右键后,点击重启任务,重启任务后,再次按热键即可恢复亮度调节。...

ubuntu20.04.6 触摸屏一体机,外接视频流盒子开机输入登录密码触屏失灵问题解决方法
1. 首先直接运行xrandr命令,查看设备的相关信息: 运行之后会显示当前连接设备的屏幕信息,如下图,LVDS和VGA-0,而HDMI屏幕为disconnect,意为没有连接: 2. 设置开机主屏幕显示: xrand…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...