网络原理————HTTP
1,HTTP简介
我们上一期谈到了网络编程尤其是TCP和UDP,使用网络套接字来实现网络编程,上一期忘记说了,我们使用TCP的时候,我们用了线程池,这样就可以处理很多客户端而不会阻塞,那么如果客户端一直一直增加,那么线程不是就会一直增加吗,太多的线程不就反噬了吗,这是就会有IO多路复用,这个是啥意思呢,本质上就是让一个线程干多个活,比如当前线程正在服务一个客户端,但是这个客户端一直不请求,比如停在输入就不动了,那么线程就会先去别的客户端完成任务,等客户端发出请求了再回来;
好啦,现在正式来学习我们新的内容吧,HTTP:
HTTP是什么呢?
HTTP是超文本传输协议,是一种广泛的应用层协议,HTTP往往是基于TCP协议实现的,例如HTTP1.0,但是HTTP3是基于UDP实现的,但是我们还是广泛使用HTTP1.1, 应用层涉及的协议,其实有很多都是程序员自定的,那么如何自定协议呢?
第一步我们要明确传输的信息,第二步我们要约定组织信息的格式;
比如我们网购,就需要商家的id,商家的图片之类呀,而约定组织信息的格式就有很多了,比如:
1,行文本格式
可以直接写:1,商家241,商家点名....,商家商品.....可以直接这么写,这是很早之前的方案,在性能,安全性,和数据复杂性方面都是很弱的,我们直接淘汰它;
2,xml格式
还记得我们之前写JDBC的时候吗,我们在maven项目中导入过依赖,那个就是用的xml格式
这个就是xml格式,我们可以写
<Requset><UsedId>1000<UsedId>
<Request>
响应的时候再把什么店名啥的放上去,但是这样的话我们会看到<UsedId> 这些玩意都重复的呀,我们服务器中最贵的就是带宽,我们用这个格式是很废带宽的,所以这个也不用;
3,json
这个是最常用的了,比如
{useid : 12,name : "zhangsan"
}
这样也能表示我们要传递的信息,代码可读性更好了,并且比xml更节省带宽,但是还是存在冗余信息;
4,protobuf
基于二进制格式,对数据进行压缩,代码可读性很差,但是带宽消耗更小了;
我们当前所学的HTTP是javaWeb开发最核心的协议,一定要学好;
说这么多感觉在放屁嗷,你也没说HTTP到底是啥呀,我们在浏览器搜索网址时,我们输入一个URL,比如京东的网址,浏览器就把我们的HTTP请求发送给京东的服务器,服务器在接请求之后,返回一个HTTP响应,浏览器接收到HTTP请求之后就会解析,展示我们所看到的内容,HTTP呢就是应用层协议,TCP/IP是传输层协议,他们只在意传输的目标,而应用层协议在意的是我拿到这个请求,或者是响应之后我该怎么做........大家能懂不,简单来说,就是我们输入URL,就会有HTTP请求发送给服务器,服务器计算之后就会返回HTTP响应,浏览器就会解析HTTP响应;
另外HTTP是典型的一对一模式,请求就会有响应的响应,网络中还有其他模式,比如上传文件就是多问一答,下载文件就是一问多答;
2,HTTP协议格式
我们下面具体看看HTTP协议格式,我们要借助一个工具Fiddler,抓包工具,大家可以去官网下载,这个小玩意;
下面来简单介绍一下这个小玩意的使用,我们下载好后打开Fiddler,
左侧是我们抓到的所有HTTP和HTTPS请求,我刚才打开了DeepSeek的网址,抓到了一个蓝色的HTTP请求,我们点击它,
右上是请求报文,右下是响应报文,前提我们要点击那个Raw,这个就是我们的报文了,
我们可以点击这个就能在记事本中查看了,干嘛呢,太小了呀,所以在记事本中看,
左侧的报文可能有不同颜色的:
红色表示报错,
蓝色表示这个请求得到了个网页,
绿色表示是个js,
灰色表示这个响应的数据已经被缓存了;
Fiddler呢就是一个代理,它很清楚客户端和服务端的通信过程,就像点外卖,快递小哥很清楚用户买了什么和商家怎么做的,
下面我们来看请求和响应:
我们来抓一个搜狗的请求:
第一行我们叫首行,后面叫报头,之后是空行,可能有写请求会有正文,再来看响应
也是有首行,报头,空行,这会有正文了,不过看不懂嗷;
我们可以归纳一下请求和响应的协议格式:
我们一会儿再详细讲这些方法啥的,
Header,报头,请求的属性,用冒号分割的键值对,用\n分割,直到遇到空行Header部分结束;
Body,正文,空行后面都是正文,body允许为空字符串,如果body存在那么在Header中就会有Content_Length存在来标识body的长度,如果响应中服务器返回了html,那么html就会在body中;那么为啥要有空行呢,这有啥用呀,HTTP中没有规定报头的长度,我们为了区分报头跟正文,我们就使用空行当分隔符了,因为TCP是面向字节流的,如果没这个空行就发生黏包问题了。
3,HTTP请求(Request)
下面我们来具体了解下请求;
1,认识URL
URL呢是文件在互联网上的唯一标识符;
看这个京东的URL,我们来一步步解析,第一个Https:是协议名,后面的www,jd.com是域名,DNS协议会把它解析成对应的IP地址和端口号,这里没有,在问号前面可能还会有层次路径,问号后面是查询字符串,是以键值对的形式写入的,中间使用&分阁;
我们来举一个例子,我们想吃麻辣烫,我们去呼和浩特新城区的4号路的好吃麻辣烫买麻辣烫,有微辣,菌汤,和番茄味的,我们现在以URL的方式完成我们的请求:
http://呼和浩特新城区:4号路好吃麻辣烫/菌汤/香菇的?葱=多放&香菜=少放&辣椒=不要
这就是URL了,我们使用它表示网络上的各种资源,就像居民的身份证一样;
下面来介绍另一个东西URL encode,这个是啥呢,//和?还有&我们已经使用了,那么我们就想要传输这个//和?呢,我们需要转义它,我们就会把这个字符的二级制格式拿出来,把它转换成16进制前面在加上百分号,不仅仅是特殊符号,有些字符和汉字也是需要转义的;
2,认识“方法”
我们用FIddler抓包的时候,首行通常会写一个get或者post之类的,这个就是方法,方法意思就是这次请求要干什么;
我们需要了解的有4个方法,get,post,put,delete;
1,get
get方法是最常用的http请求,我们获取Http,css,js,输入URL等都是都会发送一个get请求,get请求,我们直接来抓一个get请求看看,
GET https://www.sogou.com/ HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
sec-ch-ua: "Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://cn.bing.com/
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: SUV=1711253676867268; SMYUV=1711253676867674; SUID=466C71745239A00A000000006610061C; cuid=AAHszzVlSwAAAAqgMxgVxQEANgg=; SNUID=D6541A8E50566020C39188E750E3FF67; IPLOC=CN1501; ABTEST=0|1745244093|v17
看下嗷,刚开始的方法名get,后面跟了URL和版本号, 我们看最下面,没有正文,get请求通常是没正文的,我们会通过查询字符串传参;
并且get请求的URL长度是没有限制的取决于浏览器和HTTP服务端的实现;
2,post
post一般会适用于登录界面,或者是上传文件,post的body一般不为空,并且存在content_type和content_length来指定Header,
另外两个方法其实用的很少,我们大可以用get和post实现很多很多的功能,put和delete的存在感很低,我们可能会根据语义来规范使用,比如put是上传,delete是删除,
我们现在来谈谈post和get的区别吧:
其实是没有本质上的区别的,可以混着使用;
1,语义上不同,get用于获取数据,post用来提交数据
2,携带数据的方式不同,get通常是在查询字符串上,也可以在body中,但是少见;post的数据通常是在body中,也有很少的在查询字符串上
3,get请求是幂等的,但是post请求不是幂等的,幂等性是啥意思呢,如果多次请求得到的结果是一样的,我们就视为幂等的,但是现在get也会被设计成不幂等的,比如猜你喜欢
4,get可以被缓存,而post不能被缓存
关于安全性呢,有人可能会说get的查询字符串不就放上面了吗,我都能看到,post一般没有,那么post就比get安全,这种说法是错误的,因为post一抓个包,也是能看到的,安不安全取决于对它的加密程度;
还有说post的传输量大于get的,这个也是不准确的,因为没有明确规定post中body的长度和get的URL长度,取决于浏览器和服务器的实现;
还有一种错误的说法是get只能传输文本数据,post可以传输二进制数据,这种的说法也是错误的,虽然get的查询字符串确实只能传输文本数据,但是可以把二进制数据转化为16进制数据放到上面;
3,认识请求“报头”
下面我们正式来学习报头部分,刚才说这部分是键值对结构,我们来具体讲下都有什么需要关注的:
1)Host
表示服务器的地址和端口,
GET https://www.sogou.com/ HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
sec-ch-ua: "Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://cn.bing.com/
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: SUV=1711253676867268; SMYUV=1711253676867674; SUID=466C71745239A00A000000006610061C; cuid=AAHszzVlSwAAAAqgMxgVxQEANgg=; SNUID=D6541A8E50566020C39188E750E3FF67; IPLOC=CN1501; ABTEST=0|1745244093|v17
还是看这个,那个Host后面跟的就是服务器的地址和端口,有同学可能要问了,这个跟首行的URL不是一样吗,是一样的,但是如果我们使用代理的话就不一样了,使用代理,URL可能就会发生变化,但是Host里面的是不会变的,存储的是最原始的路径,我们后面使用HTTPS加密的时候也不会去处理URL,而是针对Header和正文部分加密;
2)Content-Length
X-Ceto-ref: 6808e87e5e0746e2ad939775c5bb5a92|AFD:6808e87e5e0746e2ad939775c5bb5a92|2025-04-23T13:17:50.871Z
Content-Encoding: gzip
Expires: Wed, 23 Apr 2025 13:17:50 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Wed, 23 Apr 2025 13:17:50 GMT
Content-Length: 18962
Connection: keep-alive
Set-Cookie: _C_ETH=1; domain=.msn.cn; path=/; secure; httponly
Set-Cookie: _C_Auth=
Set-Cookie: USRLOC=; expires=Fri, 23 Apr 2027 13:17:50 GMT; domain=.msn.cn; path=/; secure; samesite=none; httponly
Alt-Svc: h3=":443"; ma=93600
Akamai-Request-BC: [a=60.221.202.1
这个是我随便截取的一个响应,我们可以看到有个content-Length :18962,这个表示呢body中的数据长度,单位是字节,有这一行键值对前提是要有body嗷,这玩意有啥用呢,我们开篇说过,我们现在常用的HTTP,版本小于2.0的,在传输层那是基于TCP实现的,HTTP协议呢,就是规定了TCP传输字符串的格式,比如首行之后是body呀,我们如果没有body的话读到空行就结束了,但是如果有body呢,那么长一坨坨,TCP是面向字节流的,TCP自己分不清哪到哪是一个有效的数据,所以就需要先读取Header中的content-Length,来明确自己在body中一次需要读取多少长度的字节;但是2.0版本之后HTTP使用UDP是不需要的,因为我们知道UDP是面向数据报;
3)Content-Type
表示请求数据的格式,显示了接收方需要如何解析body中的数据;
我们来看看都能解析什么数据:
1> HTML text/html 浏览器会解析标签,把标签转换成页面
2> CSS text/css 浏览器会解析选择器啥的,之后那这些样式应用到页面
3> JS application/javascript
4> JSON application/json
5> 图片 image/png ; image/jpg
博主知识有限..............反正呢,HTTP请求能包含很多格式,body可以传很多东西。
请求和响应呢,只要有body的话就一定有这两个属性,Content-Length和Content-Type,没有的话这个报文绝对是错误的;
4)User-Agent
User-Agent里面表示了了用户使用的设备,浏览器,还有操作系统的情况;
这个有啥用呢,以前呢,大家的浏览器版本是不一样的,存储空间都是很宝贵的,可能浏览器可以升级了,并且支持更多的功能了,一个网站就想升级下它的功能,但是呢,有很多用户是不喜欢升级的,我相信很多人都这样,不想踩坑嘛,那么怎么办,我们难道要放弃旧的用户吗,那肯定是不可能的,我们有了User-Agent就能知道当前用户的浏览器版,返回对应版本的网站响应,这也意味着程序员要更累了,维护两个版本的代码;还有一个用途是知道用户使用的设备,如果是手机返回手机的对应界面,如果是电脑端就返回电脑端的界面,虽然前端里好像有响应式什么什么来应对这个情况,但我们返回不同的版本也是个解决办法;
5) Referer
这个描述了当前页面是从哪个页面跳转过来的,我们来点个广告抓一下包,
抓包,可以看到嗷,这Referer是从搜狗来的,这里跟大家讲一个事,早期呢,大家都是使用HTTP的,各大广告平台会有一个按跳转次数计费,广告主和广告平台会去对跳转次数,但是广告主呢,总是少,最后有大佬发现了一个问题,就是运营商可以改他们的Referer,把Rerfer改成自己,那么这个广告钱不就归我了吗,这就是臭名昭著的运营商劫持,明晃晃的抢你的钱,后来大家使用了HTTPS才从技术上抵制了这样的影响;
6)cookie
这个是重点,大家好好理解一下:
我们这里讲一下cookie和session:
cookie是存储在客户端中,
session是存储在服务端的,
我们现在是客户端,我们要访问服务器,我们首先要登录,我们输入密码,如果密码正确了呢,就会生成一个sessionId,通过set-cookie把sessionId给客户端,同时服务端会生成一个session对象,把用户的关键信息都会保存到session对象中,服务端构建sessionId和Session对象作为键值对保存在服务端,而客户端被setCookie后内存中就有了sessionId,我们就可以拿着这个sessionId在服务器进行操作,并返回你需要的信息,但是一般setCookie是包含过期时间的,这就是为啥我们登录之后会有一段时间是不用登录的,但是时间太久了还是需要登录;
我们可以来举一个例子,我们去医院看病,医生会给我们发一个诊疗卡,因为医生很忙,是不会一个一个去记病人的,医生让你去抽血,做心电,都会让你刷诊疗卡并且更新你的信息,你做完一系列流程之后回到医生那,它又会去拿诊疗卡来看病,诊疗卡就相当于一个sessionId,我们去看病医生就会生成一个就诊卡,并且在电脑上有我们对应的信息,医生setCookie发给我们就诊卡,我们拿着就诊卡去看病;懂了没~
4,认识请求“正文”
接下来就是正文部分的内容了
这个是跟Header部分的Content-Type强相关的:
1)
application/x-www-form-urlencoded
表单数据编码格式,数据编码为键值对,适用于简单文本数据的提交,不支持二级制数据,并且要符合URL编码;
2)multipart/form-data
混合数据类型(文本+二进制),支持文件上传,适用于登录场景,每个部分以 --boundary
开头,以 --boundary--
结尾
3)application/json
以json形式传输结构化数据,支持复杂数据类型,
相关文章:
网络原理————HTTP
1,HTTP简介 我们上一期谈到了网络编程尤其是TCP和UDP,使用网络套接字来实现网络编程,上一期忘记说了,我们使用TCP的时候,我们用了线程池,这样就可以处理很多客户端而不会阻塞,那么如果客户端一…...
安装Jupyter Notebook 之不断报错 差点放弃版
error: subprocess-exited-with-error Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [6 lines of output] Cargo, the Rust package manager, is not installed or is not on PATH. This package requires Rust and Cargo to com…...
w~大模型~合集13
我自己的原文哦~ https://blog.51cto.com/whaosoft/13864163 #TextRCNN、TextCNN、RNN 小小搬运工周末也要学习一下~~虽然和世界没关 但还是地铁上看书吧, 大老勿怪 今天来说一下 文本分类必备经典模型 模型 SOTA!模型资源站收录情况 模型来源论文 RAE …...
【华为】防火墙双击热备-之-主备模式-单外网线路
FW1和FW2的业务接口都工作在三层,上行连接二层交换机。上行交换机连接运营商的接入点,运营商为企业分配的IP地址为100.100.100.2。现在希望FW1和FW2以主备备份方式工作。正常情况下,流量通过FW1转发;当FW1出现故障时,流…...
学习记录:DAY16
Maven 进阶与前端实战 前言 二轮考核的内容下来了,由整体项目构建转为实现特定模块的功能。对细节的要求更高了,而且有手搓线程池、手搓依赖注入等进阶要求,又有得学力。嘻嘻,太简单了,只要我手搓 Spring Boot 框架……...
基于 Spring Boot 瑞吉外卖系统开发(六)
基于 Spring Boot 瑞吉外卖系统开发(六) 菜品列表 在系统管理端首页,单击左侧菜单栏中的“菜品管理”,会在右侧打开菜品管理页面。 请求URL/dish/page,请求方法GET,请求参数page,pageSize。 该菜品列表…...
香港服务器租用需要哪些性能要求
在如今数字化的时代,租用香港服务器成为了许多企业和个人的选择。但你知道租用香港服务器需要哪些性能要求吗?香港服务器租用需满足硬件性能、网络质量、安全合规、扩展能力四大核心要求,旨在支撑业务高并发、低延迟、稳定安全的运行环境。其…...
LLama Factory从入门到放弃
目录 简介 安装 LLama Factory界面介绍 数据格式要求 微调训练 今天在这里介绍一种常用的大模型微调框架——LLama Factory。 简介 LLama Factory 是一个高效的界面化大语言模型微调工具库,支持多种参数高效微调技术,提供简洁接口和丰富示例&#…...
钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)
大禹智库 第 9期〔总第463期〕2025-4-23 钧瓷产业许昌共识:技术破壁产业再造生态重构(一) ——基于钧瓷产业一体化与数字化原始创新的双轮驱动实践 在当今快速发展的科技领域,创新已成为推动进步的核心动力,企业生存和…...
思科路由器密码绕过+重置
思科路由器密码忘记,重新设置密码不重置配置 1、路由器在初始化过程中会询问是否进行初始化配置,输入no,将直接进入路由器,不会出现用户设置、密码设置等操作。 Would you like to enter the initial configuration dialog? [ye…...
OpenCV 图形API(52)颜色空间转换-----将 NV12 格式的图像数据转换为 RGB 格式的图像
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 NV12 (YUV420p) 色彩空间转换为 RGB。该函数将输入图像从 NV12 色彩空间转换到 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图…...
为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型
GeoJSON规范中没有"圆形"类型 GeoJSON是一种用于表示地理空间数据的标准格式,它的规范中只定义了以下几种基本几何类型: Point (点) LineString (线) Polygon (多边形) MultiPoint (多点) MultiLineString (多线) MultiPolygon (多多边形) Ge…...
【解读】Chrome 浏览器实验性功能全景
Chrome 浏览器提供了大量可配置的实验性或功能性设置,主要涉及安全、性能、多媒体、Web API、隐私等多个方面,这些设置可在 Chrome 浏览器的 flags 页面进行调整。 安全相关设置 不安全源设置:可通过#unsafely-treat-insecure-origin-as-sec…...
LInux平均负载
Linux平均负载是**指在一定时间内,系统中处于可运行状态或正在等待资源的进程数的平均值。**它是衡量系统整体工作负载的重要指标,反映了系统的繁忙程度。平均负载通常分为过去1分钟、5分钟和15分钟的平均值。 理解平均负载的关键点 与CPU核心数的关系 *…...
【人工智能】Ollama 负载均衡革命:多用户大模型服务的高效调度与优化
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在 多用户大模型推理 场景下,负载均衡 是确保高并发、低延迟的关键挑战。本文以 Ollama(一个流行的本地大模型运行框架)为例,深入探讨 …...
deepseek-php-client开源程序是强力维护的 PHP API 客户端,允许您与 deepseek API 交互
一、软件介绍 文末提供程序和源码下载学习 deepseek-php-client开源程序是强力维护的 PHP API 客户端,允许您与 deepseek API 交互。 二、Features 特点 无缝 API 集成:DeepSeek 人工智能功能的 PHP 优先接口。流畅构建器模式:可链式调用的…...
ThinkPHP快速使用手册
目录 介绍 安装(windows环境) 安装Composer 安装ThinkPHP 目录结构 配置文件 第一个接口(Controller层) Hello World 自定义Controller 请求参数 获取查询参数(Get请求) 获取指定请求参数 获取…...
文档构建:Sphinx全面使用指南 — 强化篇
文档构建:Sphinx全面使用指南 — 强化篇 Sphinx 是一款强大的文档生成工具,使用 reStructuredText 作为标记语言,通过扩展兼容 Markdown,支持 HTML、PDF、EPUB 等多种输出格式。它具备自动索引、代码高亮、跨语言支持等功能&#…...
Laravel 自定义 Artisan 命令行
1.什么是Artisan 命令行 Artisan 是 Laravel 中自带的命令行接口。Artisan 以 artisan 脚本的方式存在于应用的根目录中,提供了许多有用的命令。 查看所有命令行 php artisan list系统自带我很多的命令,大家可以自己去试一下,例如…...
node.js 实战——(fs模块 知识点学习)
fs 模块 也可以称之为文件系统模块,是node中的内置模块,可以实现与硬盘的交互。比如文件的创建、删除、重命名、移动,还有文件内容的写入、读取,以及文件夹的相关操作 #mermaid-svg-NAByzqTngZUOyQcY {font-family:"trebuch…...
openharmony5.0.0中C++公共基础类测试-线程相关(一)
C公共基础类测试及源码剖析 延续传统,show me the code,除了给出应用示例还重点分析了下openharmony中的实现。 简介 openharmony中提供了C公共基础类库,为标准系统提供了一些常用的C开发工具类,本文分析其实现,并给…...
前缀和相似题共赏
P3131 [USACO16JAN] Subsequences Summing to Sevens S P3131 [USACO16JAN] Subsequences Summing to Sevens S 思路: 一看到区间和我们应该就能马上想到把这个区间拆分成两个前缀相减的形式 式子为:(Pre[r] - Pre[l-1]) % 7 0 Pre[r] % 7 Pre[l-1] % 7 Pre[r] Pre[l-1] 所…...
一文读懂https
http和https的关系 http,应用层协议,由于采用明文传输,不安全,还有很多其他安全问题,为此就衍生出了同为应用层协议的https。https在http的基础上引入了SSL(Secure Socket Layer 安全套接层)和…...
为什么 requests 不是 python 标准库?
为什么 requests 不是 python 标准库? requests开发者Kenneth之前还严肃地征求过这个意见,感兴趣的可以看看 https://github.com/psf/requests/issues/2424 我大致瞅了下,基本都不赞成requests加入python标准库,主要有以下两个原…...
[STM32] 4-1 UART与串口通信
文章目录 前言4-1 UART与串口通信串口简介串口接线 数据帧串口的数据帧格式空闲位起始位数据位校验位(位于数据位内部)奇偶校验 停止位 异步通信和波特率同步通信异步通信波特率 流控的概念串口流控的工作原理 随堂测试问题1:说出Tx、Rx、CTS、RTS、VCC、…...
7-1 三种语言的单词转换
编写程序实现:首先从键盘输入若干个中文与英文单词的偶对,以空行作结束标记;再输入若干个英文与丹麦文单词的偶对,以空行作结束标记。然后输入一个中文单词,输出对应的丹麦文单词;若不存在该单词࿰…...
高防IP是什么
"高防IP"是指"高防护IP",是一种防御DDoS(分布式拒绝服务攻击)的网络安全服务。在分布式拒绝服务攻击中,攻击者会利用许多不同的计算机或者其他设备,通过向目标发送大量的网络请求来尝试使目标服务…...
基于javaweb的SSM宠物商城设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
《TCP/IP详解 卷1:协议》之第六章:ICMP:Internet控制报文协议
目录 一、ICMP协议 二、ICMP 报文格式 三、ICMP询问报文 四、ICMP 差错报告报文 五、ICMP端口不可达差错 一、ICMP协议 ICMP(Internet Control Message Protocol,互联网控制消息协议)是网络层的一个核心协议,用于在IP主机、…...
SpringBoot项目,密码加密之“BCrypt加密”
前言 这种方法,是当前推荐的密码加密方式。(现在不推荐使用MD5加密了)。 如何在springboot项目中,使用bcrypt加密?请分步骤详细介绍一下 一.在Spring Boot项目中使用BCrypt加密的详细步骤 BCrypt是当前推荐用于密码存…...
外贸获客新革命:基于AI的搜索引擎排名攻防战——48小时抢占谷歌TOP3的技术逻辑与实战路径
一、传统SEO的三大死亡陷阱(为什么你的客户正在被AI截流?) 关键词荒漠化 人工筛选关键词效率不足1%,95%的B2B采购商使用长尾词搜索(如"IP68 waterproof LED strip for outdoor projects")而非通…...
0101基础知识-区块链-web3
文章目录 1 web3学习路线2 区块链简史2.1 区块链2.2 公共账本2.3 区块链的设计哲学2.3.1 去中心化2.3.2 共识2.3.2.1 上链2.3.2.2 共识算法 3 web3面向资产的互联网3.1 安全性和去中心化的权衡 4 智能合约4.1 以太坊智能合约4.2 去中心化应用 5 小结结语 1 web3学习路线 参考下…...
SpringMVC从入门到上手-全面讲解SpringMVC的使用.
一、springmvc介绍 MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分: Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中&…...
解锁现代生活健康密码,开启养生新方式
在科技飞速发展的当下,我们享受着便捷生活,却也面临诸多健康隐患。想要维持良好状态,不妨从这些细节入手,解锁科学养生之道。 肠道是人体重要的消化器官,也是最大的免疫器官,养护肠道至关重要。日常可多…...
绿色森林人文生活纪实摄影Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色介绍 绿色森林人文生活纪实摄影 Lr 调色,是借助 Lightroom 软件,对以绿色森林为背景,记录人文生活场景的纪实摄影作品进行后期调色处理。通过调整画面的色彩、光影、对比度等参数,让画面融入绿色森林的独特氛围,真…...
【项目篇】仿照RabbitMQ模拟实现消息队列
大家好呀 我是浪前 项目篇:仿照RabbitMQ模拟实现消息队列 今天是项目的第一篇,我们先来创建出最核心的几个类。 仿照RabbitMQ模拟实现消息队列 创建Exchange类MessageQueue类Binding类Message类1:BasicProperties类2:正文部分3&a…...
JAVA程序获取SVN提交记录
1.获取文件提交记录 private String userName "userName "; //svn账号 private String password "password "; //svn密码 private String urlString "urlString "; //svnurl 换成自己对应的svn信息 package com.tengzhi.common.dao;import…...
从检索到生成:RAG 如何重构大模型的知识边界?
目录 一、技术演进图谱说明 二、RAG 技术概述 (一)核心思想说明 (二)RAG 发展路径与研究范式 三、Naive RAG:最基础的检索增强生成范式 (一)Naive RAG 的标准流程 1. 索引(In…...
rabbitmq-spring-boot-start版本优化升级
文章目录 1.前言2.优化升级内容3.依赖4.使用4.1发送消息代码示例4.2消费监听代码示例4.3 brock中的消息 5.RabbmitMq的MessageConverter消息转换器5.1默认行为5.2JDK 序列化的缺点5.3使用 JSON 进行序列化 6.总结 1.前言 由于之前手写了一个好用的rabbitmq-spring-boot-start启…...
SVN仓库突然没有权限访问
如果svn仓库突然出现无法访问的情况,提示没有权限,所有账号都是如此,新创建的账号也不行。 并且会突然提示要输入账号密码。 出现这个情况时,大概率库里面的文件有http或者https的字样,因为单独给该文件添加权限导致…...
vue实现静默打印pdf
浏览器中想要打印文件,不依靠浏览器自带的打印窗口,想要实现静默打印(也就是不弹出打印对话框),同时控制打印份数的功能,一种方式是使用vue-plugin-hiprint和本地安装客户端electron-hiprint 本来是浏览器去…...
如何开启远程桌面连接外网访问?异地远程控制内网主机
实现远程桌面连接外网访问,能够突破地域限制,随时随地访问远程计算机,满足远程办公、技术支持等多种需求。下面为你详细介绍开启方法。 一、联网条件 确保本地计算机和远程计算机都有稳定的网络连接,有联网能上网。 二、开启远程…...
数据结构与算法学习笔记(Acwing提高课)----动态规划·数字三角形
数据结构与算法学习笔记----动态规划数字三角形 author: 明月清了个风 first publish time: 2025.4.23 ps⭐️终于开始提高课的题啦,借的人家的号看,以后给y总补票叭,提高课的题比之前的多很多啊哈哈哈哈,基本上每种题型都对应了…...
RK3568平台开发系列讲解(调试篇)debugfs文件系统及常见调试节点介绍
更多内容可以加入Linux系统知识库套餐(教程+视频+答疑) 🚀返回专栏总目录 文章目录 一、什么是debugfs二、/proc/filesystems三、debugfs的挂载3.1、fstab 的文件结构3.2、手动挂载与卸载四、debugfs 常见目录有哪些4.1、/sys/kernel/debug/gpio4.2、/sys/kernel/debug/…...
数字化转型避坑指南:中钧科技如何用“四个锚点”破解转型深水区
数字化转型浪潮下,企业常陷入四大典型陷阱:跟风式投入、数据沼泽化、流程伪在线、安全裸奔化。中钧科技旗下产品以“经营帮”平台为核心,通过针对性方案帮助企业绕开深坑。 陷阱一:盲目跟风,为数字化而数字化 许…...
数字化转型下的批发订货系统:降本增效的关键路径
随着数字化转型的不断深入,越来越多的企业开始拥抱现代化的技术和工具,以提升业务效率、降低运营成本。批发行业,作为一个高度依赖库存和订单管理的行业,数字化转型尤为关键。传统的批发订货系统存在信息不对称、操作复杂、效率低…...
一 、环境的安装 Anaconda + Pycharm + PaddlePaddle
《从零到一实践:系统性学习生成式 AI(NLP)》 一 、环境的安装 Anaconda Pycharm PaddlePaddle 1. Anaconda 软件安装 Anaconda 软件安装有大量的教程,此处不在说明,安装完成之后界面如下: 2. 创建 Anaconda 虚拟环境 Paddl…...
Dhtmlx Gantt教程
想实现的效果 插件安装: npm i dhtmlx-gantt使用该插件的时候,直接导入包和对应的样式即可: import { Gantt} from "dhtmlx-gantt"; import "dhtmlx-gantt/codebase/dhtmlxgantt.css";也可以安装试用版本,…...
大模型框架技术全景与下一代架构演进
一、大模型框架概述 大模型框架是支撑千亿级参数模型训练、推理及产业落地的技术底座,涵盖分布式计算、高效内存管理、多模态融合等核心模块。从GPT-3到Gemini Ultra,大模型框架的迭代推动AI从“作坊式实验”迈向“工业化生产”。据Gartner预测&a…...
官方不存在tomcat10-maven-plugin插件
Maven 中央仓库中没有官方的tomcat10-maven-plugin。Apache Tomcat Maven 插件项目目前仅对以下插件提供官方支持: tomcat6-maven-plugin tomcat7-maven-plugin tomcat8-maven-plugin tomcat9-maven-plugin 如果你想使用 cargo 命令来跑支持 Jakarta EE 的 Tomcat 1…...