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

HTTP和HTTPS

一.介绍HTTP

        HTTP全称为超文本传输协议,是一种应用非常广泛的应用层协议。目前,主流使用的HTTP版本是HTTP1.1和HTTP2.0,在这边文章中,讨论的是HTTP1.1。

        使用浏览器,打开手机上的APP或者是后端程序,都是分布式/微服务体系结构,也就是服务器之间的相互调用,这些大概率都是使用的HTTP。

        HTTP最早一些版本是基于TCP,而在HTTP3.0是基于UDP。HTTP协议也是一种典型的一问一答模型的协议(一问一答模型:客户端给服务器发送一条请求,服务器返回一条响应,形成了一一对应,构成了一问一答模型)打开网页就是一问一答模型。

二.HTTP报文格式

        通过抓包工具来观察到HTTP请求/响应的详细情况(抓包:获取到通过网卡上的数据,并且解析显示出来)本篇文章使用的抓包软件是fiddler。

1.HTTP请求格式

 i.首行

         以fiddler抓搜狗浏览器为例,GET是HTTP请求的方法,https://sogou.com/是URL访问的资源, HTTP/1.1是HTTP的版本号。

ii.请求头(head)

从第二行开始,一直到空行结束都是请求头:

请求头中的每一行都是一个键值对,键和值之前通过 :+空格 分隔开。

iii.空行

请求头的结束标记。

iv.正文(body)

        有的请求中会有body,但是有的请求中就没有body,刚刚抓的搜狗浏览器的包中 的请求中就没有body。

        通过某登入网页,抓了有body请求的包,图中画横线的地方就是body正文,抓的这个包的请求的方法不是GET了,而是POST,需要注意的是,GET一般都没有body,因为GET是从服务器中获取数据,而POST一般有body是因为,POST是把数据给服务器。

2.HTTP响应格式

i.首行

HTTP/1.1是版本号,200状态码,OK是状态码的描述。(状态码是用来表示成功或者失败的原因,并且首行之间不同的部分都会用空格分隔)

ii.响应头(head)

响应头中也是键值对,每一行是一个键值对,通过空行来进行结尾,键和值之间使用:+ 空格来分割。键值对也是标准规定的,有的键值对只能出现在请求中,有的只能出现在响应中,有的都可以出现。

iii.空行

响应报头的结束标记。

iv.正文(body)

对于响应来说,正文通常都是HTML/CSS/JS/JSON/图片/音频/字体......

3.URL

URL(Uniform Resource Locator,统一资源定位符)是用于标识和定位互联网上资源(如网页、图片、文件等)的字符串,俗称“网址”。它规定了资源的位置及访问方式,是互联网资源寻址的核心工具。(URI唯一资源标识符)

(1)URL基本格式

协议方案名:URL是给哪个协议使用

登录信息:当前网站已经不再使用这样的方式进行身份认证了

服务区地址:IP或是域名(确定唯一的主机)

服务器端口号:确定主机上的程序(不写端口号,浏览器会根据http(80端口)或https(443端口)协议自动拼接)

带层次的文件路径:确定服务器上的具体资源

查询字符串:键值对结构,针对访问的资源进行补充说明

片段标识符:表示一个页面中的某个部分,常见于一些文档类网站

(2)URL Encode

防止URL中因为一些特殊符号导致解析失败

转义规则:

把要转的符号/汉字每个字节按照十六机制的方式表示出来,给每个字节前面加上%就可以了。

三.HTTP方法

1.GET

(1)直接在浏览器中输入URL,就会触发GET请求

(2)HTML页面中很多元素会进一步触发GET请求

        但凡是域名中带有sogou字样的都是这个页面进一步触发的请求。当前看到的这些请求是有搜狗主页的HTML进一步触发的,HTML包含一些link,script,a,img.......都可能进一步的触发HTTP get请求,进一步从服务器获取资源。

        访问一个页面不是一次HTTP请求能够搞定的,而是通过多个HTTP(GET)请求最终汇总得到的结果。

        上述是通过ctrl + F5 得到的请求内容,这些内容主要是一些CSS文件,JavaScript文件,图片文件,字体文件等(这些内容一般都是固定的,改变频率非常低)

        ctrl + F5是忽略缓存,强制从服务器重新读取数据,而F5是为了节省服务器贷款,加快了页面展示的速度,并没有清理缓存,而是将第一次访问搜狗主页时,把上述内容保存下来也就是缓存。后续访问时,没必要重新获取上述内容。

(3)JS代码中也能够触发GET请求

2.POST

(1)登录/注册

登入gitte时,fiddler的抓包post信息:

(2)上传文件

在gitte中更换头像时,上传图片,fiddler的抓包post信息:

        这里body中的内容,就是头像图片中的二进制内容(base64转码后的内容),图片本身是二进制的,HTTP协议虽然也能传输二进制,但是很多时候也会把二进制数据进行转码(不一定是会用url encode(转码体积太大))

(3)GET和POST区别

        首先,GET和POST本质上没有什么区别,GET场景下能使用时,POST也能用,POST能使用的场景,GET也能使用。

但是GET和POST并不代表没有区别,其中存在一些区别。

i.语义

        GET表示从服务器中拿数据,POST表示往服务器提交数据。如果就想使用GET提交数据,并不是不行,只是说不建议。就像使用POST来获取数据也是可以,但是也不建议。

ii.传递数据方式不同

        GET传递数据,通常是通过查询字符串(query string)把自定义数据交给服务器,POST传递数据,通常通过body把自定义数据交给服务器。

        在GET中也能加body(不建议这样做,而且有些库,不支持解析GET的body)给POST也能加query string一般也不会这样做,有的产品为了设计简单一致,一股脑全部使用POST

iii.幂等性

        GET方法对应的请求,通常设计成幂等的,POST方法对应的请求,对于幂等性则无要求。

幂等性的概念:

        幂等性(Idempotence)是指同一请求多次执行与一次执行的效果相同。具体来说,无论客户端发送多少次相同的请求,服务器端资源的状态最终保持一致。幂等性是HTTP方法设计的重要原则之一,尤其在网络不可靠(如超时、重试)或客户端行为不确定(如用户重复提交)的场景下,幂等性能够有效避免资源状态的意外改变。

(iv)继承幂等性

        GET如果设计成幂等的,此时GET的结果是可以被缓存的(浏览器针对css,js,图片等缓存,运营商CDN,运营商的反向代理,服务器这里的一些缓存(代码集成/单独部署)),POST不设计成幂等的,POST就不应该被缓存。

3.其他方法

四.请求报头和响应报头

1.host

表示服务器主机的地址和端口这部分信息在URL中已经有所体现了。

2.Content-Length和Content-Type

Content-Length:表示body中的数据长度,单位是字节。

Content-Type:表示请求的body中的数据格式,其值也是固定的(text是文本)

        Content-Type的属性会直接在这个属性中指定body的编码方式,浏览器会按照UTF8解析body的内容,如果这里写的编码方式和body实际的方法不匹配(或者根本不写),页面就会出现乱码情况。

        浏览器会直接根据这里的值决定如何解析body的内容。Content-Length和Content-Type都属于在请求和响应中都会存在的。

        一个请求/响应中,没有body,也就没有这两个字段,如果有body,则必须有这两个字段。因此Content-Length和Content-Type也告诉我们这一个HTTP数据报到这里就结束了。

        如果一个HTTP数据报,没有body,此时空行就相当于分隔符了,如果一个HTTP数据报中有body,此时Content—Length就描述了body的长度。

3.User-Agent(简称UA)

上述的信息包含操作系统信息(版本)和浏览器信息(版本)

        UA目前的作用是用于做数据统计的,可以统计很多的业务指标,根据统计结果,进一步的迭代改进产品。UA的统计主要就是用来区分PC和移动端。

        在以前,UA字段获取到用户的浏览器信息和操作系统信息后,就可以判定当前用户的浏览器版本都支持哪些特性,比如说只支持文字图片,还是说能支持多媒体等等。

        以前通过UA来解决浏览器页面的问题,手机和电脑的屏幕尺寸是不同的,需要对页面进行排版和功能展示,就需要通过UA的方式进行切入,平板这样特殊的设备也是能够通过UA来进行切入。

4.Refer

        描述了当前页面是从哪个页面跳转过来的,Refer不一定有,有时候可能会被隐藏。

5.Cookie

        Cookie也是键值对结构,上述的键值对看似是从浏览器通过请求发送给服务器的,实际上这些数据最初都是从服务器返回给浏览器的。此处看到的这些数据,都相当于是在浏览器本地存储。

        Cookie是属于浏览器给网站提供的一种“客户端存储数据”的机制,因为为了安全,浏览器进制网页直接访问用户的硬盘,但是浏览器并没有把路堵死,并且开了一个口子。

        允许网页通过键值对的方式来存储数据(这样的数据本质上也是在硬盘上的)具体这样的键值对是如何存储到硬盘上的,浏览器已经封装好了, 网页本身无法干预。        

        Cookie里面的内容也来自于服务器,首次访问某个网站时,可能是不带Cookie的,在响应中就会有Set-Cookie这样的Header,把一些键值对写回到浏览器这边,浏览器后续访问这个网站就会带有Cookie。

                Cookie这样的键值对是按照域名为维度来分类的,一个域名下可能有多个Cookie,后续访问哪个域名就把这个域名下的Cookie带入到请求中。

总结Cookie

(1)Cookie的定义:Cookie是浏览器本地持久化存储数据的一种机制,按照键值对方式存储,键值对内容都是程序员自定义的,按照域名为维度分别进行存储。

(2)Cookie的来处:服务器返回的响应数据报中,包含Set—Cookie字段。

(3)Cookie的去处:后续浏览器访问同一个服务器的时间,就会把之间存储的Cookie再带上,从而发送到服务器这边。

验证用户是否登入,并且当前状态是否为登入状态:

五.状态码

        HTTP状态码是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理结果。它们分为五个类别,以首位数字区分。

1xx(信息响应)

表示请求已被接收,继续处理。属于临时响应,客户端应等待最终响应。

  • 100 Continue
    客户端应继续发送请求体。用于客户端发送较大请求前,确认服务器是否接受请求(通过Expect: 100-continue头部)。

  • 101 Switching Protocols
    服务器同意切换协议(如升级到WebSocket或HTTP/2)。

  • 102 Processing (WebDAV)
    服务器已接收请求但尚未完成处理,避免客户端超时。


2xx(成功响应)

表示请求已成功被服务器接收、理解并处理。

  • 200 OK
    请求成功,响应中包含请求的数据(如GET或POST)。

  • 201 Created
    资源已创建(如通过PUT或POST)。响应应包含Location头部指向新资源。

  • 202 Accepted
    请求已接收但未处理完成(适用于异步任务)。

  • 204 No Content
    请求成功,但响应中无内容(常用于DELETE或更新操作)。

  • 206 Partial Content
    服务器返回部分内容(响应范围请求,通过Range头部实现)。


3xx(重定向)

需客户端进一步操作以完成请求。通常用于URL重定向或缓存控制。

  • 301 Moved Permanently
    资源已永久迁移到新URL。客户端应更新书签,后续请求直接访问新URL。

  • 302 Found
    资源临时位于不同URL。客户端应本次请求新URL,但未来可能仍用原地址。

  • 303 See Other
    响应结果位于另一个URL(强制客户端用GET访问新URL,避免重复提交POST)。

  • 304 Not Modified
    资源未修改(客户端使用缓存副本,通过If-Modified-SinceETag验证)。

  • 307 Temporary Redirect
    与302类似,但要求客户端保持原HTTP方法(如POST)。

  • 308 Permanent Redirect
    与301类似,但要求客户端保持原HTTP方法。


4xx(客户端错误)

客户端请求有误,服务器无法处理。

  • 400 Bad Request
    请求语法错误(如参数错误、格式无效)。

  • 401 Unauthorized
    需要身份验证(如未提供凭证或凭证错误)。响应需包含WWW-Authenticate头部。

  • 403 Forbidden
    服务器拒绝请求(权限不足,如无访问资源的权限)。

  • 404 Not Found
    请求的资源不存在,或服务器不愿透露存在性。

  • 405 Method Not Allowed
    URL不支持请求的HTTP方法(响应应包含Allow头部列出允许的方法)。

  • 406 Not Acceptable
    服务器无法提供客户端要求的资源表示形式(如请求的Accept头部不被支持)。

  • 408 Request Timeout
    服务器等待请求超时,客户端可重试。

  • 409 Conflict
    请求与服务器当前状态冲突(如文件版本冲突)。

  • 410 Gone
    资源已永久删除,无新地址。

  • 413 Payload Too Large
    请求体超过服务器限制。

  • 415 Unsupported Media Type
    请求的媒体类型不被支持(如上传格式错误)。

  • 429 Too Many Requests
    客户端发送过多请求(限流场景)。


5xx(服务器错误)

服务器处理请求时发生错误。

  • 500 Internal Server Error
    服务器内部错误(通用错误,无具体信息)。

  • 501 Not Implemented
    服务器不支持请求的功能(如未实现的HTTP方法)。

  • 502 Bad Gateway
    服务器作为网关或代理时,从上游服务器收到无效响应。

  • 503 Service Unavailable
    服务器暂时不可用(如过载或维护)。可配合Retry-After头部提示重试时间。

  • 504 Gateway Timeout
    网关或代理服务器未能及时从上游获取响应。

  • 505 HTTP Version Not Supported
    服务器不支持请求的HTTP协议版本。


其他特殊状态码

  • 418 I'm a teapot (RFC 2324)
    彩蛋状态码,表示服务器是“茶壶”,无法煮咖啡。

  • 451 Unavailable For Legal Reasons
    因法律原因资源不可访问(如政府审查)。

六.HTTPS

1.运营商劫持

        我需要下载天天动听的软件,一般下载的话就是直接是这个软件的安装包,但是如果被运营商劫持之后,这个安装包可能就是其他的软件了。

2.加密

(1)明文:要传输的原始数据

(2)密文:把明文进行加密后,得到一个让别人不能理解的数据

(3)加密:明文 -> 密文

(4)解密:密文 -> 明文

(5)密钥:进行加密和解密的主要数据/辅助工具

(6)公钥:公开出来的密钥

(7)私钥:私藏起来的密钥

i.对称加密

两类加密算法,加密还是解密都是使用同一个密钥

ii.非对称加密

一对密钥,A和B,用A加密,则要用B解密,或者用B加密,用A解密。

3.基本工作过程

HTTPS是在HTTP的基础上加入了密钥

HTTP明文的数据传输,容易被黑客劫持

1)引入对称加密

        由于服务器对应多个客户端,不能让每一个客户端的密钥相同(因为密钥相同,劫持者可以自己创一个客户端获取密钥,从而进行解密)因此每个客户端,需要自己生成一个不同的密钥。

        因此就需要让每个客户端连上服务器时,自己生成一个随机的对称密钥,服务器也得拿到这个密钥才能进行解密,就引入了传输对称密钥给服务器。

2)传输对称密钥给服务器

        按照这样的传输模式,密钥传输给服务器时,此时黑客就可能截获到这个密钥,后续的加密形同虚设。

3)引入非对称加密

        通过非对称加密将要传输的对称密钥进行加密,客户端通过公钥对密钥进行加密,即使公钥是公开的,也必须使用私钥才能对其进行解密,所以通过黑客的网络设备并没有影响。

        引入非对称加密不是为了取代对称加密,而是为了辅助它进行加密,也因为非对称加密的运算量开销比较大,比较消耗性能。

        这里的业务数据仍然使用的是对称加密传输,这里的非对称加密只是用来加密传输对称加密。

4)中间人攻击

        服务器先生成一对公钥(pub1)和私钥(pri1),客户端向服务器询问公钥是什么时,会经过被黑客入侵后的路由器,黑客再把这个请求发给服务器。

        此时服务器返回公钥会经过黑客入侵的路由器,黑客收到公钥是什么之后,自身在生成公钥(pub2)和私钥(pri2),把自己生成的公钥传给客户端。

        客户端无法知道这个公钥是否是黑客伪造的,只能相信这个信息。客户端接受pub2后,将对称密钥基于pub2来进加密并且发送给服务器后,黑客会在路由器处劫持。

        黑客劫持后,使用pri2进行解密获取对称密钥,再将对称密钥使用pub1进行加密发送给服务器。此时服务器也无法知道这个传回来的数据是否被黑客动了手脚。

        这样黑客就能将客户端和服务器中传输的数据进行更改。

5)引入证书机制

        为了让客户端识别出,拿到的公钥不是伪造的,需要通过第三方公正机构,当需要搭建服务器且使用HTTPS时,就需要在公正机构这里,申请证书(例如网站的域名,营业执照,备案号,公钥等等······)

        公正机构会通过上述的信息生成一个电子证书,服务器获申到证书之后,后续客户端从服务器就不是只拿公钥这么简单,而是拿的整个证书。

        此时客户端凭借证书中的数字签名(保证合法性的关键要点),对证书的合法性进行校验。签名是通过校验和+加密获取的(校验和:原始数据相同,计算得到的校验和就相同,校验和不同,说明原始数据就不同)

        加密是通过证书中的各个字段综合在一起,计算校验和后进行非对称的加密(公正机构自己生成一对公钥和私钥,公正机构自己保存好自己的私钥,公钥则会发给各个客户端)公正机构拿着自己的私钥对刚才的校验和进行加密,就得到了数字签名。

        客户端验证数字签名,先将整数中的各个字段再算一次校验和,得到checkSum1,再使用公正机构的公钥,对数字签名进行解密,得到checkSum2。

        对比checkSum1和checkSum2,如果相等,视为当前证书的各个字段,就是和服务器这边发出来的证书是一模一样的,此时就可以认为这是合法证书。

        如果不相等,意味着证书上的内容被中间黑客篡改过了,此时浏览器往往就会弹出警告页面,提示用户,该网站不安全。

        黑客截取请求后,如果篡改数据,想要更新数字签名是不行的,数字签名需要使用公正机构的私钥进行加密,这个私钥黑客是无法拿到的。黑客如果自己生成一个私钥,客户端拿着公正机构的公钥无法对其数据进行解密。此时客户端解密出错也可以认为是证书有问题,也会弹出危险窗口。

4.Fiddler可以抓包的原因

        使用抓包工具时,会需要你先信任抓包工具的证书,信任抓包工具的证书之后,此时你手里就有fiddler的公钥了,此时fiddler就相当于一个你认可的公正机构。

        此时浏览器发送咱们的证书是啥,fiddler再将请求转发给服务器,此时服务器的证书传给fiddler,fiddler此时篡改证书中的数据,把证书中的公钥改成fiddler的公钥,在通过自身重新生成新的证书,重新计算校验和并且使用自己的私钥进行加密,得到数字签名。

        此时fiddler将改过的证书发送给浏览器,浏览器通过fiddler的公钥进行解密就可以获取到fiddler篡改后的数据了。后续客户端使用fiddler的公钥加密对称密钥,fiddler通过私钥解密,再将对称密钥的数据使用服务器的公钥加密对称密钥后再传输给服务器。

相关文章:

HTTP和HTTPS

一.介绍HTTP HTTP全称为超文本传输协议,是一种应用非常广泛的应用层协议。目前,主流使用的HTTP版本是HTTP1.1和HTTP2.0,在这边文章中,讨论的是HTTP1.1。 使用浏览器,打开手机上的APP或者是后端程序,都是分布…...

应急响应--流量分析

(一)Cobalt Strike流量特征分析 1.HTTP特征 源码特征: 在流量中,通过http协议的url路径,在checksum8解密算法计算后,32位的后门得到的结果是92,64位的后门得到的结果是93,该特征符…...

docker 学习

在docker中通常需要使用ADD等命令复制附件,同时也需要使用其他命令操作原始镜像中的内容,会导致原文文件被覆盖后缺少执行权限,比如: sqlmapapi: ERROR (file is not executable) 或者XXX: ERROR (file is not execu…...

C++时间复杂度详解

一、时间复杂度核心概念 1.1 为什么要研究时间复杂度 当处理大规模数据时(如计算斐波那契数列第57项),不同算法效率差异巨大: 递推解法:0.23秒完成 递归解法:需要2369秒(约40分钟&#xff09…...

【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析

一、Slider基础用法 在 XAML 中添加一个 Slider 控件&#xff0c;并设置其基本属性&#xff1a; <Slider Minimum"0" <!-- 最小值 -->Maximum"100" <!-- 最大值 -->Value"50" <!-- 初始值 -->Width&quo…...

PgSql 操作技巧

1、查询数据导出csv数据 \COPY (SELECT w.* from t_sys_warn w ) TO /home/cuadmin/warn_output.csv WITH CSV HEADER;2、导出sql Insert语句 pg_dump -U 用户名 -h 主机名 -p 端口号 -d 数据库名 --inserts -t 表名 > 导出文件.sqlpg_dump -U username -d dbname -t tabl…...

高效自动化测试:打造Python+Requests+Pytest+Allure+YAML的接口测试框架

一、背景 在快节奏的开发周期中&#xff0c;如何确保接口质量&#xff1f;自动化测试是关键。通过构建标准化、可复用的测试框架&#xff0c;能显著提升测试效率与准确性&#xff0c;为项目质量保驾护航[1][7]。 二、目标 ✅ 核心目标&#xff1a; ● 实现快速、高效的接口测试…...

设计模式文章汇总-Golang语言实现

Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 Golang学习笔记_29——抽象工厂模式 Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 Golang学习笔记_34——组合模式 Gola…...

深度学习PyTorch之13种模型精度评估公式及调用方法

深度学习pytorch之22种损失函数数学公式和代码定义 深度学习pytorch之19种优化算法&#xff08;optimizer&#xff09;解析 深度学习pytorch之4种归一化方法&#xff08;Normalization&#xff09;原理公式解析和参数使用 深度学习pytorch之简单方法自定义9类卷积即插即用 实时…...

c#面试题整理4

1.stirng str"",string strnull&#xff0c;俩者有何区别 空字符串占有存储控件&#xff0c;null不占用 2.class与struct的异同 异同class 可继承 引用类型 1.都可以定义方法字段 2.都可实例化&#xff0c;与类的使用几乎一样 struct 不可继承 值类型 只能声明带…...

游戏辅助技术培训班教程【A001-初级班】

课程概述&#xff1a; 本教程为游戏辅助技术培训班的初级班课程&#xff0c;本章为第二阶段&#xff0c;旨在帮助学员系统掌握游戏辅助技术的核心技能。课程内容从C/C编程基础到高级内存操作、代码注入、DLL注入及MFC编程&#xff0c;全面覆盖游戏辅助开发的关键知识点。 课程…...

[NewStarCTF 2023 公开赛道]ez_sql1 【sqlmap使用/大小写绕过】

题目&#xff1a; 发现id处可以sql注入&#xff1a; 虽然输入id1;show databases;#没什么回显&#xff0c;但是知道这里是字符型注入了 这次利用sqlmap注入 --dbs&#xff1a;列出所有数据库名字 python .\sqlmap.py -u http://a40b2f0a-823f-4c99-b43c-08b94ed0abb2.node5.…...

SSTI注入笔记

文章目录 基础知识SSTI利用条件验证SSTI是否存在验证console码SSTI类引用机制过滤的绕过.被过滤下划线被过滤中括号被过滤过滤了{{过滤了单引号或者双引号过滤了数字关键字被过滤 基础知识 python的模块引用&#xff0c;优先引用当前目录下的模块&#xff0c;比如from pwn imp…...

大模型中的剪枝、蒸馏是什么意思?

环境&#xff1a; 剪枝 蒸馏 问题描述&#xff1a; 大模型中的剪枝、蒸馏是什么意思&#xff1f; 解决方案&#xff1a; 大模型的剪枝&#xff08;Pruning&#xff09;和蒸馏&#xff08;Distillation&#xff09;是两种常见的模型优化技术&#xff0c;用于减少模型的大小…...

AI学习记录 - PPO算法草稿

returns 下面是两种方式生成returns的值&#xff0c;第一种好一点 delta计算方式不一样 通过一些计算方式&#xff0c;将未来的一些计算值&#xff0c;赋予到前面去&#xff0c;从而影响将前面的token和后面的token绑定到一起&#xff0c;从而实现每当生成一个tokend…...

蓝桥杯FPGA-ds1302驱动

1. 驱动的作用 调用SPI底层驱动&#xff0c;实现DS1302的驱动 2. 关键程序代码说明 1. 独热编码设置状态机的状态 使用独热编码会使系统更加高效稳定 localparam IDLE 8b0000_0001; localparam CE_HIGH 8b0000_0010; localparam CE_LOW 8b0000_0100; localparam…...

探索C/C++的奥秘之list

list和我们之前讲的东西都一样&#xff0c;list第二个参数是一个空间配置器&#xff0c;是一个内存池&#xff0c; 底层是一个带头双向循环列表。list可以重载[]&#xff0c;但是效率太低了。 list的遍历不能使用下标[]&#xff0c;因为它的空间不是连续的&#xff0c;可以使用…...

Linux第六讲:进程控制

Linux第六讲&#xff1a;进程控制 1.进程创建1.1回顾fork1.2写时拷贝 2.进程终止2.1exit与_exit 3.进程等待3.1进程等待的方法&#xff08;wait和waitpid&#xff09; 4.进程程序替换4.1自定义shell的编写4.1.1输出命令行提示符4.1.2获取用户输入的命令4.1.3命令行分析4.1.4指令…...

LabVIEW基于双通道FFT共轭相乘的噪声抑制

对于双通道采集的含噪信号&#xff0c;通过FFT获取复数频谱后&#xff0c;对第二通道频谱取共轭并与第一通道频谱相乘&#xff0c;理论上可增强相关信号成分并抑制非相关噪声。此方法适用于通道间信号高度相关、噪声独立的场景&#xff08;如共模干扰抑制&#xff09;。以下为L…...

疯狂安卓入门,crayandroid

系列文章目录 文章目录 系列文章目录第一组 ViewGroup 为基类帧布局约束布局 第二组 TextView 及其子类button时钟 AnalogClock 和 TextClock计时器 第三组 ImageView 及其子类第四组 AdapterView 及其子类AutoCompleteTextView 的功能和用法ExapndaleListViewAdapterViewFlipp…...

SQL Server查询计划操作符(7.3)——查询计划相关操作符(10)

7.3. 查询计划相关操作符 88&#xff09;Sequence Project&#xff1a;该操作符通过对一个排序集合增加字段来进行计算。其基于一个或多个字段的值将其输入的数据行分成多个段&#xff0c;这样&#xff0c;该操作符每次输出一个段&#xff0c;这些字段显示为该操作符的参数。该…...

【Matlab仿真】如何解决三相交流信号源输出波形失真问题?

问题描述 如标题所示&#xff0c;在搭建simulink模型过程中&#xff0c;明明模型搭建的没有问题&#xff0c;但是输出的波形却不是理想的正弦波&#xff0c;影响问题分析。 问题分析 以三相交流信号源输出波形为例&#xff0c;输出信号理应为三相正弦量&#xff0c;但是仿真…...

[含文档+PPT+源码等]精品基于Python实现的校园小助手小程序的设计与实现

基于Python实现的校园小助手小程序的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、技术背景 1. Python与Django框架的优势 Python作为一种高级编程语言&#xff0c;以其简洁的语法、丰富的库和强大的社区支持&#xff0c;在Web开发领域得到了广泛…...

Nginx(基础安装+配置文件)

目录 一.Nginx基础 1.基础知识点 2.异步非阻塞机制 二.Nginx安装 2.1安装nginx3种方式 1.包管理工具安装&#xff08;yum/apt&#xff09; 2.本地包安装&#xff08;rpm/dpkg&#xff09; 3.源码编译安装 3.1 源码编译安装nginx流程&#xff08;ubuntu&#xff09; 1.…...

el-table中slot=“header“和#header的区别

在<el-table>中&#xff0c;自定义表头单元格内容&#xff0c;可以用<templat slot"header">或者<templat #header>插入自定义表头内容&#xff0c;但如果表头中含有变量&#xff0c;比如<template slot"header">{{name}}</tem…...

S19文件格式详解:汽车ECU软件升级中的核心镜像格式

文章目录 引言一、S19文件格式的起源与概述二、S19文件的核心结构三、S19在汽车ECU升级中的应用场景四、S19与其他格式的对比五、S19文件实例解析六、工具链支持与安全考量七、未来趋势与挑战结语引言 在汽车电子控制单元(ECU)的软件升级过程中,S19文件(也称为Motorola S-…...

鸿蒙跨平台框架ArkUI-X

01 引言 目前&#xff0c;移动端主流跨平台方案有Flutter、React Native、uni-app等等&#xff0c;还有刚推出不久的Compose-Multiplatform&#xff0c;真所谓是百花齐放。这些框架各有特点&#xff0c;技术实现各有差异&#xff0c;比如Flutter通过Dart编写的UI描述对接Flutte…...

群晖DS223 Docker搭建为知笔记

群晖DS223 Docker搭建为知笔记&#xff0c;打造你的专属知识宝库 一、引言 在数字化信息爆炸的时代&#xff0c;笔记软件成为了我们管理知识、记录灵感的得力助手。为知笔记&#xff0c;作为一款专注于工作笔记和团队协作的云笔记产品&#xff0c;以其丰富的功能和便捷的使用体…...

FPGA入门教程

引言 FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;是一种灵活且强大的硬件设备&#xff0c;广泛应用于数字电路设计、信号处理、嵌入式系统等领域。与传统的ASIC&#xff08;专用集成电路&#xff09;不同&#xff0c;FPGA允许用户…...

DR和BDR的选举规则

在 OSPF&#xff08;开放最短路径优先&#xff09;协议中&#xff0c;DR&#xff08;Designated Router&#xff0c;指定路由器&#xff09; 和 BDR&#xff08;Backup Designated Router&#xff0c;备份指定路由器&#xff09; 的选举是为了在广播型网络&#xff08;如以太网…...

无需环境,直接用 Docker 来启动你的 Python 项目

大家好 我是洪峰 想象这样一种场景&#xff0c;你写好了代码&#xff0c;准备部署在新的服务器上&#xff0c;这台服务器只有 Python2 和 Python3.6&#xff0c;没有你代码适配好的 Python3.12&#xff0c;那怎么办&#xff1f; 1、编译安装 Python&#xff0c;我不推荐这种方…...

STM32之BKP

VBAT备用电源。接的时候和主电源共地&#xff0c;正极接在一起&#xff0c;中间连接一个100nf的电容。BKP是RAM存储器。 四组VDD都要接到3.3V的电源上&#xff0c;要使用备用电池&#xff0c;就把电池正极接到VBAT&#xff0c;负极跟主电源共地。 TEMPER引脚先加一个默认的上拉…...

【08】单片机编程核心技巧:变量命名规范

【08】单片机编程核心技巧&#xff1a;变量命名规范 &#xff08;基于单片机开发实践&#xff0c;适用于 C/C 语言&#xff09; &#x1f4cc; 核心原则 1️⃣ 清晰性&#xff1a;通过前缀、后缀、大小写区分变量类型、作用域、数据宽度等。 2️⃣ 一致性&#xff1a;同一项…...

JVM、MySQL常见面试题(尽力局)

JVM篇 一.谈一谈JDK、JRE、JVM分别是什么&#xff0c;有什么联系&#xff1f; 1.JDK是Java工具包&#xff0c;里面包含了JRE、Javac编译器等。 2.JRE是java运行环境&#xff0c;里面包含了JVM、JavaSE标准库类等。 3.JVM是Java虚拟机&#xff0c;运行编译后的.class的文件&am…...

Pytorch 转向TFConv过程中的卷积转换

转换知识基础 图像中使用的卷积一般为&#xff0c;正方形卷积核针对一个同等面积邻域的&#xff0c;进行相乘后邻域叠加到中心&#xff0c;相当于考虑中心像素的周围信息&#xff0c;做了一定的信息融合。 卷积相关参数 卷积前: input c1 卷积中: kernel 卷积核 stride 步…...

基于LabVIEW的伺服阀高频振动测试闭环控制系统

为实现伺服阀在设定位置上下快速移动&#xff08;1kHz控制频率&#xff09;的振动测试目标&#xff0c;需构建基于LabVIEW的闭环控制系统。系统需满足高速数据采集、实时控制算法&#xff08;如PID或自适应控制&#xff09;、高精度电流驱动及传感器反馈处理等需求。结合用户提…...

QQuick3D-Camera的介绍

QQuick3D-Camera的介绍 Camera的概述 Camera类继承于 Node&#xff1b;Camera定义了怎样将一个3D场景&#xff08;Scene&#xff09;投影到2D的表面上&#xff1b;一个场景至少需要一个Camera来可视化其内容。 Camera 可以像场景中任何节点一样&#xff0c;被定位和旋转&…...

django下防御race condition漏洞(竞争型漏洞)

目录 竞争型漏洞 概念 常见类型及示例 环境搭建 ​编辑漏洞复现 ucenter/1/ ucenter/2/ ucenter/3/ ucenter/4/ 总结 悲观锁 乐观锁 竞争型漏洞 概念 竞争型漏洞&#xff0c;也称为竞态条件漏洞&#xff08;Race Condition Vulnerability&#xff09;&#xff0c;…...

【测试框架篇】单元测试框架pytest(4):assert断言详解

一、前言 用例三要素之一就是对预期结果的断言。 何为断言&#xff1f;简单来说就是实际结果和期望结果去对比&#xff0c;符合预期就测试pass&#xff0c;不符合预期那就测试 failed。断言内容就是你要的预期结果。断言包含对接口响应内容做断言、也包含对落DB的数据做断言。…...

多视图几何--结构恢复--三角测量

三角测量 1. 核心公式推导 假设两个相机的投影矩阵为 P P P 和 P ′ P P′&#xff0c;对应的匹配图像点(同名点)为 ( u , v ) (u, v) (u,v) 和 ( u ′ , v ′ ) (u, v) (u′,v′)&#xff0c;目标是求解三维点 X [ X x , X y , X z , 1 ] T X [X_x, X_y, X_z, 1]^T X…...

【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手

目录 一、前言 二、WPS接入AI工具优势​​​​​​​ 三、WPS接入AI工具两种方式 3.1 手动配置的方式 3.2 Office AI助手 四、WPS手动配置方式接入AI大模型 4.1 安装VBA插件 4.1.1 下载VBA插件并安装 4.2 配置WPS 4.3 WPS集成VB 4.4 AI助手效果测试 4.5 配置模板文…...

⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II

⭐算法OJ⭐N-皇后问题【回溯剪枝】&#xff08;C实现&#xff09;N-Queens 问题描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…...

解锁 AI 量化新境界:Qbot 携手 iTick

在量化投资的汹涌浪潮中&#xff0c;你是否渴望拥有一个强大且便捷的工具&#xff0c;助你乘风破浪&#xff0c;驶向财富的彼岸&#xff1f;如今&#xff0c;Qbot 与 iTick 强强联合&#xff0c;为广大投资者和开发者打造出一个前所未有的 AI 量化生态系统。 Qbot&#xff1a;量…...

vue2设置横向滚动指令

图片横向滑动展示效果 创建directives.js文件 // 横向列表拖拽 const draggleScrollX {inserted(el, binding) {let isDragging false;let startX 0;let scrollLeft 0;el.classList.add("draggle-horizontal");// 添加监听事件-鼠标按下const onMouseDown (eve…...

Git和GitHub基础教学

文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…...

【Linux docker】关于docker启动出错的解决方法。

无论遇到什么docker启动不了的问题 就是 查看docker状态sytemctl status docker查看docker日志sudo journalctl -u docker.service查看docker三个配置文件&#xff08;可能是配置的时候格式错误&#xff09;&#xff1a;/etc/docker/daemon.json&#xff08;如果存在&#xf…...

程序化广告行业(2/89):从程序化广告深挖数据处理技巧

程序化广告行业&#xff08;2/89&#xff09;&#xff1a;从程序化广告深挖数据处理技巧 大家好&#xff01;我一直希望能和大家在技术学习的道路上携手共进&#xff0c;这也是我写这一系列博客的初衷。上次我们一起学习了Python基础的数据处理知识&#xff0c;这次咱们借助一…...

第七课:Python反爬攻防战:Headers/IP代理与验证码

在爬虫开发过程中&#xff0c;反爬虫机制成为了我们必须面对的挑战。本文将深入探讨Python爬虫中常见的反爬机制&#xff0c;并详细解析如何通过随机User-Agent生成、代理IP池搭建以及验证码识别来应对这些反爬策略。文章将包含完整的示例代码&#xff0c;帮助读者更好地理解和…...

时序数据库TimescaleDB基本操作示例

好的&#xff01;以下是使用 TimescaleDB 的 Java 示例&#xff08;基于 JDBC&#xff0c;因为 TimescaleDB 是 PostgreSQL 的扩展&#xff0c;官方未提供独立的 Java SDK&#xff09;&#xff1a; 1. 添加依赖&#xff08;Maven&#xff09; <dependency><groupId&g…...

【CSS 】Class Variance Authority CSS 类名管理工具库

1.背景、什么是 CVA&#xff1f; Class Variance Authority (CVA) 是一个用于管理 CSS 类名 的工具库&#xff0c;特别适合在 React 或 Vue 等前端框架中使用。它可以帮助你更轻松地处理组件的 样式变体&#xff08;Variants&#xff09;&#xff0c;比如按钮的不同状态&#…...