Fiddler抓包教程->HTTP和HTTPS基础知识
1.简介
有的伙伴可能会好奇,不是讲解和分享抓包工具,怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。
Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。
2.前言
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
3.HTTP和HTTPS基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:
一种是建立一个信息安全通道,来保证数据传输的安全;
另一种就是确认网站的真实性。
4.什么是http请求和响应?
http的工作方式为一个简单的客户端请求与服务端响应的应答过程。它指定了客户端发送给服务器什么样的消息形式以及得到什么样的消息响应,所有的www文件都必须遵循这个标准协议, 目的是提供一种发布和接收html页面的方法。举个例子比如说 客户端(浏览器)向服务器提交一个http请求, 那么服务器又会向客户端这边返回响应信息。而这些响应信息包含关于客户端请求的状态信息以及客户端所需要的内容信息。如下图所示:
5.http协议和web之间的本质
http协议和web之间的本质说白了就是就是浏览器和服务器打交道的。客户端向服务器端发送Http请求,然后服务器端向客户端返回http响应!
http协议:所谓协议,就是指双方遵循的规范。http协议,就是浏览器和服务器之间进行“沟通”的一种规范。, 也就是以这个规范来向服务器发起请求, 服务器才会给客户端进行正确的响应, 所以http有的时候也可以理解为是一种 规范、规则、标准。http协议是属于“应用层的协议”,而且是基于TCP/IP协议的, 也就是说http通信发生在TCP/IP链接之上。
通俗一点说http协议就是基于TCP的一种应用层协议 它不会关系数据传输的细节问题,也就是说你不用去关心它下层TCP的运行逻辑, 它的核心只在于用来规定客户端和服务端的数据传输格式。最早http是用来向客户端传输html文件内容,默认的端口80
5.1扩展
感兴趣的朋友可以自行了解一下iso网络七层模型。
如果你接触过socket网络编程,就应该明白TCP和UDP这两种使用广泛的通信协议(建立连接、三次握手)。
既然TCP/UDP是广泛使用的网络通信协议,那为啥有多出个http协议来呢?
曾自己动手写过一个简单的web服务器处理软件,根据我的推断(不一定准确)。UDP协议具有不可靠性和不安全性,显然这很难满足web应用的需要。
而TCP协议是基于连接和三次握手的,虽然具有可靠性,但人具有一定的缺陷。但试想一下,普通的C/S架构软件,顶多上千个Client同时连接,而B/S架构的网站,十万人同时在线也是很平常的事儿。如果十万个客户端和服务器一直保持连接状态,那服务器如何满足承载呢?
这就衍生出了http协议。基于TCP的可靠性连接。通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源。这样既保证了资源可用,也吸取了TCP的可靠性的优点。
正因为这点,所以大家通常说http协议是“无状态”的,也就是“服务器不知道你客户端干了啥”,其实很大程度上是基于性能考虑的。以至于后来有了session之类的玩意。
通俗点说http,就是在请求和响应之后,服务器端立即关闭连接,并释放资源,这样既保证了资源可显示与可用性,也吸取了TCP协议的可靠性优点,但是缺点就无法跟踪用户的操作了,所以我们在后端开发的学习中才会接触一个东西叫session和cookie技术
所以你也可以理解为http是基于请求与响应的模式, 并且是无状态的应用层协议。
6.http请求和响应的基本原理
HTTP 消息是服务器和客户端之间交换数据的方式。有两种类型的消息︰ 请求(requests)-- 由客户端发送用来触发一个服务器上的动作;响应(responses)-- 来自服务器的应答。
任何一个http请求都只会分为两个部分: 一个请求报文另外一个是响应报文。
请求报文是客户端按照一定的格式生成一段文本,然后发给我们的服务端, 而服务器接收到了这样一个请求报文就会解析里面的内容进行处理,然后做出反馈,也就是响应。
响应报文也就是服务器端根据请求报文反馈给客户端的文本信息。
6.1http请求(request)报文基本结构
http请求(request)也叫请求报文,一个基本的HTTP请求报文由请求行(request line)、请求头部(request header)、空行和请求数据4个部分构成。
1.请求行(request line):就是请求方式和协议,也就是说用于描述客户端的请求方式,例如post/get方式, 以及请求的资源名称和HTTP协议的版本号! 2.若干个请求头(request header): 这些也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境 等等, 这些消息头中有很多头部字段名 和 对应的值它的格式为 name:value 3.空白行 4.请求正文内容
说了这么多是不是有点懵有点晕,那就使用抓包工具抓取实际例子,我们具体看一下:
我们在学习http知识的时候 就可以先直接使用Fiddler来抓取一个http请求和http响应来先看看到底是什么东西!这样也有助于我们来更好地理解http。我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http请求结构都包含哪些信息
例如一个GET方式的请求(Request)信息,如下图所示:
6.2http响应(response)报文基本结构
http响应(response)也叫响应报文,一个基本的HTTP响应报文由响应行、响应头、空行和响应体4个部分构成。
1.响应行:响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK 2.响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。 3.空白行: 4.响应体:响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
其实响应报文比请求报文更加简单, 你只要能够搞懂请求报文 那么响应报文就很容易搞懂,同样的道理,我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http响应结构都包含哪些信息。
例如一个POST方式的请求(Request)信息 如下:例如一个POST方式的请求(Request)信息,如下图所示:
怎么样是不是看这一大堆脑壳都大了一直稳稳地响个不停呢 ?感觉无从下手,更不用说学习
7.Http请求(Request)报文结构图解
我们先来看一张请求(Request)图解,如下图所示:
然后逐一解剖上图中的各个部分,解剖结果如下:
7.1请求方法 (Request method)
我们常见的一些请求方式也就是POST/GET,当然还有其他的一些请求方式, 如下表所示:
请求方法 | 描述 |
---|---|
GET | 请求资源 比如常见的就是输入一个URL 去请求一个资源下来, 它也可以带上一定的参数一起请求 |
POST | 提交资源 比如说我们想把用户名和密码 提交到服务器去,这个时候用POST 比较好 |
HEAD | 获取响应头,检查一个对象是否存在 |
PUT | 替换资源,向服务器发送数据,并存储服务器内部 |
DELETE | 删除资源 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 显示服务器收到的请求 常见于测试和调试诊断! |
CONNECT | 对通道提供支持 |
7.2URL (Uniform Resource Locator)
URL中文名为统一资源定位符 英文全称Uniform Resource Locator ,可以使用一个URL地址来描述一个网络上的资源,而HTTP的GET
、POST
、PUT
、DELETE
对应着对这个资源的查、改、增、删四个操作。我们网络中的每一信息资源都有统一的且在网上唯一的地址!
URL具体由4部分组成:协议、主机、域名、端口、路径文件、[附加资源]
URL的一般语法格式为:
protocol :// hostname[:port] / path / [?query-parameters][#anchor]
1.协议 (protocol):指底层使用的协议类型,如:http、ftp、https、等...
2.主机名 (hostname) + 域名:HTTP服务器的IP或者域名。主机名+域名 例如: www.xsphp.com
3.端口 (port):HTTP服务器端口,端口是一个数字, 端口是可选的 省略时使用方案是服务器默认配置的端口。例如 80、8080、..各种传输协议都有默认的端口号,如http协议的默认端口为80,如果URL地址省略端口,则使用默认端口号。
注意:有时候出于安全或其他考虑,可以在服务器配置上对端口进行重新定义,也就是采用非标准端口号,那么此时,URL地址中就不能省略端口号这一项。
4.路径文件 (path):访问资源的路径。由零或多个/符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。例如: /tpl/index.php
5.查询参数 附加资源 (query-parameters):发送给HTTP服务器的数据。
这一项在URL中也是可选的 用于给动态网页如 PHP/JSP/ASP/ASP.NET等后端页面 传递参数的一种方式,并且如果是GET请求方法, 那么可有多个参数, 它们彼此用&符号隔开,每个参数的名和值用=符号隔开
语法格式: ?参数=值&参数2=值 以此类推。例如: ?id=33&age=25&name=zhangsan。举个例子:一个比较常见的url地址, 如:https://www.xxxx.net/xxxx/xxxx/xxxx/100?num=1001.2014.3001.5501
6.anchor:锚点
7.3请消息求头 (Request Header)
1.请求消息头也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境 等等前面已经说过了, 并且请求头是可以由开发人员根据需求去进行自定义的。
这些消息头中有很多头部字段名 和 对应的值它的格式为 name:value。我们常见的一些请求头如下表所示:
请求头 | 描述 | |
---|---|---|
Host | 主机IP地址或域名 | |
User-Agent | 提交一些客户端 相关信息,例如: 操作系统、浏览器 等一些版本信息给服务器 , 而这些信息可能会让服务器 按照一定的规则给客户端 返回兼容性比较好的信息! | |
Accept | 指定客户端 接收的信息类型,<br />例如:image/jpg,text/html,application/json <br />也就是可以让客户端 告诉服务器 之后客户端这一边想接收到什么样的数据格式 | |
Accept-Charset | 告诉服务器 等一会这边客户端 需要接收的字符集编码格式 , | <br />例如:gb2312、iso-8859-1、utf-8 |
Accept-Encoding | 告诉服务器 , 客户端这边可接受的内容压缩编码 ,例如gzip 可以在一定程度上节省流量! | |
Accept-Language | 告诉服务器, 客户端 可接受的语言,例如Accept-Language:zh-cn | |
Authorization | 客户端提供给服务端进行权限认证的信息, 也就是要告诉服务器端一些认证的信息,服务器才能返回响应的数据! | |
Cookie | 携带的COOKIE信息, 普通情况下,当一个用户登录成功,就会在本地保存一份cookie ,下次请求就会直接带上这个cookie 信息,也就是这个用户的相关信息 | |
Referer | 当前文档的URL 也就是纪录下从哪个链接地址 提交到服务器 的 | |
Content-Type | 向服务器 提交内容的格式<br />例如:Content-Type:application/x-www-form-urlencoded <br />总而言之,就是告诉服务器 ,客户端 传递的内容属于什么格式 或 其他编码格式! | |
Content-Length | 数据长度, 也就是客户端 向服务器端 提交内容的数据长度有多少字节! | |
Cache-Control | 缓存机制,例如:Cache-Control:no-cache | |
pragma | 防止页面被缓存,与Cache-Control:no-cache 作用一样 | |
.............................................. |
2.我们可以用Fiddler截取一个请求头看看,如下图所示:
7.4空行
空白行:也就是在消息头结束的下方,会存在一个空白行, 这是必须存在的, 是由HTTP标准规定的!
7.5请求体
请求体它的出现是要根据请求的方式不同而不同, 也就是如果是POST那么就会以键与值的形式进行发送, 如果是GET请求那么这里就不会包含请求正文内容。
从7.3抓包可以看出这里是一个json数据:
{"email":"xxxxxxx@qq.com","password":"xxxxxxx","remember":"0","code":"","mobile":"","type":"login","reqtimestamp":1647506402551}
8.http响应(Response)报文结构图解
同样我们先来看一张http响应(response)图解,如下图所示:
然后来逐一解剖上图中的各个部分,解剖结果如下:
8.1响应行
响应行也叫状态行, 上图中响应行内部其实包含了3个重要的信息部分:
HTTP协议的版本、HTTP状态码、HTTP的状态描述
1.HTTP协议的版本现目前都是HTTP/1.1 版本 这个没什么好说的!
2.HTTP状态码 可以用来表示网页服务器端给客户端返回的HTTP响应状态, 通常都是3位数字的代码, 而这些常见的状态码又可以分为几种提示类型:如下表所示:
类别状态码 | 描述 |
---|---|
1xx | 这种类别的状态码 为提示消息类型 通常表示请求被服务器端成功接收 |
2xx | 这种类别的状态码 为成功消息类型 通常表示请求被服务器端成功处理 |
3xx | 这种类别的状态码 为重定向类型 通常表示被服务器端重新定义了请求方向,需要进一步的操作以完成请求 |
4xx | 这种类别的状态码 为客户端错误信息 通常表示服务器告诉客户端的一些错误消息 |
5xx | 这种类别的状态码 为服务端错误信息 通常表示告诉客户端 服务器这边出现的一些错误信息 |
3.HTTP的状态描述是紧跟在状态码后面的英文单词
每一种具体类别状态码+状态描述可以参考下表:
1xx: 提示消息类型
消息: | 状态描述 | 含义 |
---|---|---|
100 | Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 |
101 | Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 |
2xx: 成功消息类型
消息: | 状态描述 | 含义 |
---|---|---|
200 | OK | 请求成功(其后是对GET和POST请求的应答文档。) |
201 | Created | 请求被创建完成,同时新的资源被创建。 |
202 | Accepted | 供处理的请求已被接受,但是处理未完成。 |
203 | Non-authoritative Information | 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。 |
204 | No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 |
205 | Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。 |
206 | Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它。 |
3xx: 重定向类型
消息: | 状态描述 | 含义 |
---|---|---|
300 | Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 |
301 | Moved Permanently | 所请求的页面已经转移至新的url, 说通俗一点表示请求的资源分配了url,以后就应该使用这个url |
302 | Found | 所请求的页面已经临时转移至新的url, 也就是说请求的资源临时分配了url,本次请求暂且使用这个url, 这里302与301 的区别是,302表示临时性重定向,重定向的url还有可能还会改变。 |
303 | See Other | 表示请求的资源路径发生改变,请使用GET 方法请求url。其实与302一样,但是明确指出让我们使用GET 方法请求url |
304 | Not Modified | 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。 |
305 | Use Proxy | 客户请求的文档应该通过Location头所指明的代理服务器提取。 |
306 | Unused | 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。 |
307 | Temporary Redirect | 被请求的页面已经临时移至新的url。 |
4xx: 客户端错误信息
消息: | 状态描述 | 含义 |
---|---|---|
400 | Bad Request | 服务器未能理解请求,通常为表示请求的报文中存在语法错误 ,比如: 提交json 数据的时候,如果json 格式有问题,接收端接收json ,也会出现400 bad request |
401 | Unauthorized | 被请求的页面需要用户名和密码。 |
402 | Payment Required | 此代码尚无法使用。 |
403 | Forbidden | 对被请求页面的访问被禁止。 |
404 | Not Found | 服务器无法找到被请求的页面。 |
405 | Method Not Allowed | 请求中指定的方法不被允许, 请求的方式get、post、delete 方法与后台规定的方式不符合 例如: 比如: 后台方法规定的请求方式只接受get ,如果用post 请求,就会出现 405 method not allowed 的提示 |
406 | Not Acceptable | 服务器生成的响应无法被客户端所接受。 |
407 | Proxy Authentication Required | 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 |
408 | Request Timeout | 请求超出了服务器的等待时间。 |
409 | Conflict | 由于冲突,请求无法被完成。 |
410 | Gone | 被请求的页面不可用。 |
411 | Length Required | "Content-Length" 未被定义。如果无此内容,服务器不会接受请求。 |
412 | Precondition Failed | 请求中的前提条件被服务器评估为失败。 |
413 | Request Entity Too Large | 由于所请求的实体的太大,服务器不会接受请求。 |
414 | Request-url Too Long | 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。 |
415 | Unsupported Media Type | 由于媒介类型不被支持,服务器不会接受请求, 例如: 后台程序不支持提交的content-type 类型,就会返回415 |
416 | 服务器不能满足客户在请求中指定的Range头。 | |
417 | Expectation Failed |
5xx: 服务器错误信息
消息: | 状态描述 | 含义 |
---|---|---|
500 | Internal Server Error | 请求未完成。服务器遇到不可预知的情况。 |
501 | Not Implemented | 请求未完成。服务器不支持所请求的功能。 |
502 | Bad Gateway | 请求未完成。服务器从上游服务器收到一个无效的响应。 |
503 | Service Unavailable | 请求未完成。服务器临时过载或当机。 |
504 | Gateway Timeout | 网关超时。 |
505 | HTTP Version Not Supported | 服务器不支持请求中指明的HTTP协议版本。 |
8.2响应头 (Response Header)
1.响应头也叫消息报头 也就是服务器端要告诉客户端的一些附加信息, 但是也有可能这些响应头是由后端开发人员进行自定义的!
而且这里的响应头跟请消头 很类似, 格式也基本一样, 它的格式为 name:value。具体这里也列举了一些常见的响应头 如下表所示:
响应头 | 含义 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间, 要注意返回时间的时区 |
Expiros | 服务器指定的一个缓存过期时间 |
Set-Cookie | 设置Cookie, 也就是服务器 返回的一段文本给客户端 ,让客户端 保存好,下次请求就把这个cookie 文本带上! |
Last-Modified | 资源最后修改时间 ,也就是客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用, 也就是说不用在从服务器中进行返回 |
Content-Type | 服务器 返回给客户端 的响应类型和编码字符集<br />例如:Content-Type:text/html;charset=utf-8 |
Content-Length | 内容长度, 也就是服务器 返回给客户端 返回的内容是多少字节 |
Connection | 例如Keep-Alive ,表示保持tcp链接不会关闭 ,当然它不会永久保持链接,我们在服务器端中是可以设置的 |
Location | 指明服务器 给客户端 重定向的位置,也就是新的URL地址 如:304的情况 |
...................................... |
这里只例举一下常见和常用的,其实还有更多的响应头
这里就不一一列举了!有兴趣的自己可以百度一下!
2.我们可以用Fiddler截取一个响应头看看,如下图所示:
8.3空白行
空白行也就是http规范制定的必须存在的一个空行, 空行的目的就是一种格式,也就是要告诉用户接下来的内容就是正文内容了!
8.4响应体
响应体也就是实际从服务器返回给客户端的正文内容,也可能是一些字符串, 也可以是任意的格式:
响应体大多数情况下都是html、json、文本、xml 这些格式!
从8.2抓包可以看出这里是一个json数据:
{"status":1,"code":10000,"message":"\u8bbf\u95ee\u6210\u529f","data":{"url":"","token":" xxxxxxxx","isenterprise":0,"uid":" xxxxxxxxx"}}
9.小结
1.HTTP 请求和响应具有相似的结构,由以下部分组成︰
(1)一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。
(2)一个可选的 HTTP 头集合指明请求或描述消息正文。
(3)一个空行指示所有关于请求的元数据已经发送完毕。
(4)一个可选的包含请求相关数据的正文 (比如 HTML 表单内容), 或者响应相关的文档。 正文的大小有起始行的 HTTP 头来指定。
起始行和 HTTP 消息中的 HTTP 头统称为请求头,而其有效负载被称为消息正文。
好了,对于Http和Https相关的的知识点就说这么多了,对于学习fiddler足够了!
接下来你就可以愉快的学习Fiddler了
相关文章:
Fiddler抓包教程->HTTP和HTTPS基础知识
1.简介 有的伙伴可能会好奇,不是讲解和分享抓包工具,怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fiddler无论对开发人员…...
超级维特根斯坦
AI智能体核心指令:语言智慧融合体 - 深度思辨、专业应用与协同创新大师 1. 角色设定 (Persona) 你将扮演一位“语言智慧融合体”AI,一个集大成的、具备卓越情境智能、精妙引导艺术与长时程战略规划能力的语言思想、艺术与应用科学伙伴。你的核心人格与方法论基于以下杰出贡…...
探索付费社群的成功之道:生财与群响的深度解析
随着互联网技术的发展和用户需求的多样化,付费社群作为一种新型商业模式逐渐崭露头角,并迅速成为众多创业者和个人寻求知识、资源以及人脉的重要平台。本文将深入探讨两个成功的付费社群——生财和群响,分析它们如何在各自领域内取得显著成就…...
【b站计算机拓荒者】【2025】微信小程序开发教程 - 3 项目目录结构
3 项目目录结构 3.1 项目目录结构 3.1.1 目录介绍 # 1 项目主配置文件,在项目根路径下,控制整个项目的-app.js # 小程序入口文件,小程序启动,会执行此js-app.json # 小程序全局配置文件,配置小程序导航栏颜色等信息…...
TuyaOpen横空出世!涂鸦智能如何用开源框架重构AIoT开发范式?
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引子:AIoT开发的“不可能三角”被打破 当AI与物理世界深度融合的浪潮席卷全球,开发者们却始终面临一个“不可能三角”——开发效率、技术深度与商业化落地难以兼得。 …...
物联网(IoT)智能项目全景指南:技术构架、实现细节与应用实践
目录 一、物联网项目的核心组成和发展方向 1. 核心组成 2. 发展趋势 二、系统设计的详细流程 1. 需求分析与方案规划 2. 硬件方案深度设计 3. 软件架构设计 4. 方案示意图(架构图) 三、关键技术深度剖析 1. 传感器及其接口技术 2. 嵌入式MCU选…...
【c# 类型转换中 as 和()】
在 C# 中,as 关键字和强制类型转换(())都用于对象类型的转换,但它们在语法、行为和用途上有显著的区别。 1. 语法区别 强制类型转换(()) 语法:(TargetType)expression用途:将一个…...
Elasticsearch 实战面试题,每个题目都会单独解析
Elasticsearch 在 Java 中最常用的客户端是什么?如何初始化一个 RestHighLevelClient?如何用 Spring Boot 快速集成 Elasticsearch?Spring Data Elasticsearch 如何定义实体类与索引的映射? ES的倒排索引和正排索引的区别及适用场…...
01-通过纯js理解数据驱动图表概念
现有1组一维数组数据: const data [720, 320, 531, 120, 230, 387, 258] 通过forEach循环该data,根据数据值,循环出对应长度的 rect 标签,计算好横纵坐标的位置,并在最后将各个 rect标签 append 到 svg 标签中。如图所…...
Java DTO 深度解析
一、什么是DTO? DTO(Data Transfer Object) 是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式。其核心目的是封装数据,减少网络传输开销,同时避免直接暴露领域模型&a…...
Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter
一、Python Python是一种高级、通用、解释型的开源编程语言,由Guido van Rossum于1990年代初设计。它具有以下显著特点: 1.语言特性 (1) 语法简洁易读,接近自然语言(如print(“Hello World!”)) (2) 采用强制缩进而非大括号定义代码块 (3) 支持面向对象、函数式和过…...
视频监控联网系统GB28181协议中互联结构详解
文章目录 4.1 SIP 监控域互联结构4.1.1 概述4.1.2 区域内联网4.1.3 跨区域联网4.1.4 联网方式4.1.4.1 级联4.1.4.2 互联 4.2 SIP 监控域与非 SIP 监控域互联结构4.2.1 概述4.2.2 控制协议网关4.2.3 媒体网关 智联视频超融合平台介绍 4.1 SIP 监控域互联结构 4.1.1 概述 联网系…...
系统编程的标准IO
标准IO 头文件需求: #include <stdio.h>1.fopen和fclose (1)fopen fopen的函数功能是打开一个文件。 首先看看fopen的函数声明: FILE *fopen(const char *path, const char *mode);第一个参数path是文件地址,传入的是不可变的字符…...
windows安装WS,实测可行
参考链接 1、 wsl -l -v 查看哪些ubuntu环境在运行 2、wsl -t Ubuntu 停止当前的Ubuntu 3、wsl --install -d Ubuntu-22.04 下载ubunt 4、wsl --unregister Ubuntu-22.04 移除ubuntu 5、wsl --export Ubuntu-22.04 F:\Ubuntu-22.04\Ubuntu-22.04.tar 导出 Ubuntu-22.04 为 .ta…...
【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
文章目录 T1 偏蓝 (5/5)T2 IPv6 (0/5)T3 2025 图形 (10/10)T4 最大数字 (10/10)T5 倒水 (15/15)T6 拼好数 (0/15)T7 登山 (20/20)T8 原料采购 (20/20) 更好的阅读体验 高速访问:https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久链接࿱…...
栈和队列的模拟实现
栈和队列的模拟实现 容器适配器priority_queue(优先级队列)priority_queue的使用priority_queue的模拟实现: 仿函数什么叫仿函数?需要自己实现仿函数的情况: 栈的模拟实现队列的模拟实现deque(vector和list的缝合怪&am…...
python学习day3
1比较运算符号(生成布尔类型) print(98大于90吗,98>90) print(98小于90吗,98<90) print(98等于90吗,9890) print(98不等于90吗,98!90)2逻辑运算符号 print(8>7 and 6>5) print(9>8 and 7<5) print(8<7 and 10/0) #当第一个表达式结…...
Java转Go日记(四十二):错误处理
1.1.1. 错误处理 执行任何操作后,如果发生任何错误,GORM将其设置为*DB的Error字段 if err : db.Where("name ?", "jinzhu").First(&user).Error; err ! nil {// 错误处理...}// 如果有多个错误发生,用GetErrors获…...
考研系列-408真题计算机组成原理篇(2020-2023)
写在前面 此文章是本人在备考过程中408真题计算机组成原理部分(2020年-2023年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2020年 1.机器字长相关 指令字长和机器字长没有明确的关系,但是一般来说…...
经典面试题:TCP 三次握手、四次挥手详解
在网络通信的复杂架构里,“三次握手”与“四次挥手”仿若一座无形的桥梁,它们是连接客户端与服务器的关键纽带。这座“桥梁”不仅确保了连接的稳固建立,还保障了连接的有序结束,使得网络世界中的信息能够顺畅、准确地流动。 在面…...
Raft算法学习(1)博士论文大纲
参考资料 原文一共257页,其中前六章为算法重点介绍,第七章有点像A/B TEST 论文标题: 共识:连接理论与实践 (CONSENSUS: BRIDGING THEORY AND PRACTICE) 作者: Diego Ongaro 日期: 2014年8月 机构ÿ…...
PDF处理控件Aspose.PDF教程:以编程方式将 PDF 导出为 JPG
在本节中,我们将探讨如何使用 Aspose.PDF 库将 PDF 文档转换为 JPG 图像。Aspose.PDF 是一个功能强大且用途广泛的库,专为需要以编程方式处理 PDF 文件的开发人员而设计。它提供了丰富的功能,可用于跨多个平台创建、编辑和转换 PDF 文档。其主…...
记录一下flutter项目自己封窗的弹窗
在评委项目开发中我使用到的弹窗dialog与modal sheet底部弹出组件,我对其进行了基础的封装,以适用于本项目,代码如下: class JudgeDialog {// 内容边距static EdgeInsetsGeometry _contentPadding(String? content) {return c…...
计算机网络基础概念
网络通信的本质就是进程间通信。我们日常使用的聊天软件、在线视频软件等,事实上都是本机客户端进程与远地服务端进程之间进行网络通信所实现的。我们与朋友进行远程聊天,本质上是从本地客户端将聊天内容发送给服务端,再由服务端转发给目标客…...
【原创】ubuntu22.04下载编译AOSP 15
repo init -u http://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b master source build/envsetup.sh lunch aosp_cf_x86_64_phone-trunk_staging-userdebug find ./ -name “index.lock” -exec rm -f {} ; find ./ -name “index.lock” -exec rm -i {} ;…...
鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局
华为在5月19日发布会上推出的两款鸿蒙电脑新品——华为MateBook Pro和HUAWEI MateBook Fold 非凡大师,标志着其在PC领域的深度布局和技术突破。结合发布会信息和行业背景,以下为分析及影响预测: 一、产品核心亮点及创新 华为MateBook Pro&…...
数据要素如何重构人力资本升级
一、数字经济时代 在传统工厂车间,老师傅的经验智慧曾是企业最宝贵的资产。而在现代的数字化办公室,每天产生的千万条数据流正在重塑企业创新规则。这个变革的核心密码锁定在两个关键维度:人力资本结构的质变与创新资源的智配。 数据要素与…...
【爬虫】12306自动化购票
上文: 【爬虫】12306查票-CSDN博客 下面是简单的自动化进行抢票,只写到预定票,没有写完登陆, 跳出登陆后与上述代码同理修改即可。 感觉xpath最简单,复制粘贴: 还有很多写法: 官网地址&#…...
保密行业工作沟通安全:吱吱软件的“四重防泄露”设计
“工作沟通安全威胁是指在金融、科技、医疗等保密行业中,错发、泄露、窃取一条消息或者一份文件,都有可能引发数据安全灾难性失控。以往的即时通讯软件仅依赖单一的加密手段,无法满足保密行业从发送、传输到接受全链路加密的更高规格的数据安…...
2001-2023年上市公司管理讨论与分析文本数据(MDA文本数据)
2001-2023年上市公司管理讨论与分析文本数据(MD&A文本数据) 1、时间:2001-2023年 2、来源:上市公司年报 3、格式:txt 4、样本量:6W 5、说明:“管理层讨论与分析”(MANAGEME…...
Unity3D仿星露谷物语开发46之种植/砍伐橡树
1、目标 种植一棵橡树,从种子变成大树。 然后可以使用斧头砍伐橡树。 2、删除totalGrowthDays字段 修改growthDays的含义,定义每个值为到达当前阶段的累加天数。此时最后一个阶段就是totalGrowthDays的含义。所以就可以删除totalGrowthDays字段。 &…...
9-社区动态(Stack布局)
涉及知识点: stack布局 video组件 3.组件状态控制: State、Prop以及Link装饰器 组件状态控制:Observed&ObjectLink装饰器 课时: 2 1 任务 1.1 需求 完成社区动态功能,社区动态显示用户发布的跟游戏相关的短视频,自动循环…...
如何使用MATLAB NLP工具箱进行文本聚类
文章目录 前言一、核心流程与代码实现二、高级聚类技术三、评估聚类质量四、实战案例:新闻聚类五、优化技巧与注意事项 前言 在 MATLAB 中使用 NLP 工具箱进行文本聚类主要分为数据预处理、特征提取、相似度计算、聚类算法应用和结果分析五个核心步骤。以下是详细教…...
deepseek梳理java高级开发工程师es面试题
Elasticsearch 面试题及答案(高级 Java 开发工程师版) 基础概念 1. 解释 Elasticsearch 中的倒排索引是什么?为什么它比传统数据库更适合全文搜索? 答案: 倒排索引是一种将文档中的词项(token)映射到包含该词项的文…...
查看mysql配置文件my.cnf的位置
3.删除mysql相关文件 想要完全卸载mysql,不仅要卸载应用,配置文件及相关文件也需要一一清除,还原环境配置,减少一些麻烦。 sudo rm -rf /usr/local/mysql sudo rm -rf /etc/my.cnf sudo rm -rf /var/db/mysql sudo rm -rf /var/…...
PyTorch进阶实战指南:01自定义神经网络组件开发
PyTorch进阶实战指南:01自定义神经网络组件开发 前言 在深度学习领域,PyTorch凭借其动态计算图和灵活的模块化设计,已成为学术研究和技术落地的首选框架之一。本文聚焦于神经网络组件的自定义开发,旨在帮助开发者突破现成模型的限…...
【MySQL】04.数据类型
首先我们来看一下数据类型分类: 我们接下来对红色标识的进行介绍,其他的自行了解即可。 1. 数值类型 1.1 bit 我们以bit为例来介绍整型。 mysql> create table test_bit(-> sex bit(1)-> ); mysql> desc test_bit; -----------------…...
MCP专题 | 探索MCP服务器世界:增强AI能力的精选推荐
在人工智能快速发展的今天,模型上下文协议(MCP,Model Context Protocol)已成为一项重要的技术标准,它使AI模型能够安全地与外部资源交互。MCP服务器作为AI与工具、数据库和API之间的桥梁,极大地扩展了AI的功…...
深入解析OrientDB:多模型数据库的技术优势与实际应用
OrientDB 是一款开源的多模型 NoSQL 数据库,融合了文档数据库、图数据库和对象数据库的特性。它不仅支持灵活的数据建模,还提供了高性能的查询能力,适用于社交网络、物联网、内容管理等场景。本文详细探讨 OrientDB 的核心特性、应用场景&…...
芯片分享之AD976性能介绍
产品特征: D976和AD976A均为高速、低功耗、16位模数转换器(ADC),采用5 V单电源供电。AD976A的吞吐速率为200 ksps,而AD976的吞吐速率为100 ksps。各器件均内置一个逐次逼近型开关电容ADC、一个2.5 V内部基准电压源和一个高速并行接口。最大功…...
Flutter - 集成三方库:数据库(sqflite)
数据库 $ flutter pub add sqlite $ flutter pub get$ flutter run运行失败,看是编译报错,打开Xcode工程 ⌘ B 编译 对比 GSYGithubAppFlutter 的Xcode工程Build Phases > [CP] Embed Pods Frameworks 有sqfite.framework。本地默认的Flutter工程默认未生成Pod…...
野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(三)用yolov5-face算法实现人脸检测
环境直接使用第一篇中安装好的环境即可 先clone yolov5-face项目 git clone https://github.com/deepcam-cn/yolov5-face.git 并下载预训练权重文件yolov5n-face.pt 网盘链接: https://pan.baidu.com/s/1xsYns6cyB84aPDgXB7sNDQ 提取码: lw9j (野火官方提供&am…...
基于matlabcd7.x的无网格近似方法
无网格近似方法(Meshless Methods)是一类数值计算方法,用于解决偏微分方程(PDEs)问题,特别是在几何形状复杂或需要动态网格更新的场景中。与传统的有限元方法(FEM)相比,无…...
塔式服务器都有哪些重要功能?
塔式服务器作为一种拥有着独特立式设计的服务器,能够帮助企业节省一定的放置空间,提供一系列的功能和优势,可以运用在多种应用场景当中,下面将探讨一下塔式服务器的主要功能都有哪些? 塔式服务器可以支持基本的应用程序…...
【基于SpringBoot的图书购买系统】深度讲解 分页查询用户信息,分析前后端交互的原理
引言📚 在企业级应用开发中,用户管理系统是几乎所有后台管理系统的核心模块之一。它不仅需要实现用户数据的增删改查,还需要考虑数据分页展示、状态管理、前后端交互效率等问题。本文将以一个实际的用户管理系统为例,详细讲解基于…...
机器学习算法-聚类K-Means
先来看看K-Means算法的核心流程吧 下面我们通过一个简单聚类来介绍K-Means算法迭代过程 如图(a)所示:表示初始化数据集。 如图(b)所示:假设K2,随机选择两个点作为类别质心,分别为图中的红色和蓝色质心。 如图©所示ÿ…...
初识Linux 进程:进程创建、终止与进程地址空间
目录 0.写在前面 1.进程创建 fork(): exec(): 2.进程地址空间 3.进程终止 正常终止(主动退出) 异常终止(被动终止) 0.写在前面 本文将对Linux环境下的进程:包括进程创建、终止与进程等待…...
2025年PMP 学习二十二 15章 项目绩效域
2025年PMP 学习二十二 15章 项目绩效域 文章目录 2025年PMP 学习二十二 15章 项目绩效域项目绩效域1.项目绩效域2.项目持续效域3.项目管理中的干系人管理 1.干系人持续效域促进干系人参与的步骤: 2 团队持续效域1 团队持续效域及项目团队人员有关系的活动和职能&…...
顶级流媒体服务商 Spotify 2025.04 故障复盘报告,吃他人的堑长自己的智
2025 年 4 月 16 日,Spotify 经历了一次影响全球用户的中断。以下就是发生了什么以及我们将如何解决它。 背景 我们使用 Envoy Proxy 作为我们的网络外围系统。外围是我们的软件接收用户(您!)网络流量的第一部分。然后ÿ…...
服装收银系统哪个好?服装店进销存管理软件全面评测
在服装批发零售行业,选择一款合适的收银系统和进销存管理软件至关重要。好的系统不仅能提高工作效率,还能帮助商家精准掌握库存、优化销售策略。 本文将全面分析服装收银系统的选择标准,并重点介绍秦丝进销存这一专业解决方案。 一、服装收…...