【0基础学爬虫】爬虫基础之HTTP协议的基本原理介绍
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为 HTTP 协议的基本原理介绍。
计算机网络模型
计算机网络是指由通信线路互相连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信,就是网络模型研究的问题,除了标准的 OSI 七层模型以外,常见的网络层次划分还有 TCP/IP 四层协议以及 TCP/IP 五层协议,它们之间的对应关系如下图所示:
- 物理层(Physical):负责传输比特流的硬件部分,包括各种传输介质(如铜线、光纤、无线信道)和传输设备(如集线器、交换机、路由器),基于电器特性发送高低电压(电信号)传输比特流(Bits),高电压对应数字 1,低电压对应数字 0,定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等;
- 数据链路层(Data Link):负责在物理层的传输介质上传送数据帧,并在源主机和目的主机之间建立逻辑链路,定义了电信号的分组方式,规定电信号多少位一组,每组代表什么,这一层还提供了对传输数据的检测和传输数据错误的纠正以确保数据的可靠传输,例如:Wi-Fi(IEEE 802.11)、ethernet(以太网)、FDDI(Fiber Distributed Data Interface,光纤分布式数据接口)等;
- 网络层(Network):负责在多个主机之间传送数据包,并为分组交换提供路由选择功能,基本数据单位为 IP 数据报,主要协议:IP协议(Internet Protocol,因特网互联协议)、 ICMP(Internet Control Message Protocol,因特网控制报文协议)、IGMP(Internet Group Management Protocol,Internet 组管理协议)、ARP(Address Resolution Protocol,地址解析协议)等;
- 传输层(Transport):负责在源主机和目的主机之间的端到端的数据传输,并为上层协议提供可靠的数据传输服务,主要协议:TCP 协议(Transmission Control Protocol,传输控制协议)、UDP 协议(User Datagram Protocol,用户数据报协议);
- 会话层(Session):负责封装调用 TCP,会话层建立和管理应用程序之间的通信,封装了调用 TCP 去打包,然后调用 IP 协议去找路由等操作;
- 表示层(presentation):负责解决不同系统之间的通信语法问题(数据格式化,代码转换,数据加密);
- 应用层(Application):负责向用户提供网络服务,包括文件传输、电子邮件、远程登录等,主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
HTTP 发展史
HTTP 协议和 HTTPS 协议
HTTP(Hypertext Transfer Protocol)中文名为超文本传输协议,其作用是把超文本数据从网络传输到本地浏览器,能够高效而准确地传输超文本文档。HTTP 是由万维网协会(World Wide Web Consortium)和 Internet 工作小组 IETF(Interner Engineering Task Force)合作制定的规范,目前被广泛使用的是 HTTP 1.1 版本,如今也有不少网站支持 HTTP 2.0 版本。
HTTP 协议的特点:
- 应用层协议,由请求和响应构成,是一个标准的客户端服务器模型;
- 无状态的协议,对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作;
- 通常承载于 TCP 协议之上;
- 由请求和响应构成,是一个标准的客户端服务器模型(B/S);
- 永远都是客户端发起请求,服务器回送响应;
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性;
- 双向协议,例如在上网冲浪时,浏览器是请求方 A,百度网站就是应答方 B,双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)是一种通过计算机网络进行安全通信的传输协议,经由 HTTP 进行通信,利用 SSL/TLS 建立全信道,加密数据包,HTTPS 使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性,相当于 HTTP 协议的安全版。
HTTPS 协议的特点:
- 内容加密:建立了一个信息安全通道,保证数据传输的安全性;
- 身份验证:确认网站的真实性,凡是使用 HTTPS 协议的网站,都可以通过单机浏览器地址栏的锁头标志来查看网站认证之后的真实信息,此外还可以通过 CA 机构颁发的安全签章来查询;
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改。
时势发展:
- 苹果公司强制所有 iOS APP 在2017年1月1日前全部改为使用 HTTPS 加密,否则 APP 无法在应用商店上架;
- 谷歌从2017年1月推出的 Chrome 56 开始,对未进行 HTTPS 加密的网址亮出风险提示,即在地址栏的显著位置提示用户”此网页不安全“;
- 腾讯微信小程序的官方需求文档要求后台使用 HTTPS 请求进行网络通信,不满足条件的域名和协议无法正常请求。
HTTP 和 HTTPS 的区别主要如下:
- HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用;
- HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议;
- HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
- HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
上述 HTTPS 看起来是加强版的 HTTP,可圈可点,但并不是完美无缺的:
- HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用;
- SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行;
- SSL 证书需要购买申请,功能越强大的证书费用越高;
- SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗(SSL 有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持);
- 根据 ACM CoNEXT 数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电;
- HTTPS 连接缓存不如 HTTP 高效,流量成本高;
- HTTPS 连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本;
- HTTPS 协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验,比较好的方式是采用分而治之,比如首页用 HTTP,用户信息相关页用 HTTPS。
HTTP 请求过程
HTTP 由请求和响应构成,是一个标准的客户端服务器模型(B/S),HTTP 协议永远都是客户端发起请求,服务器回送响应,HTTP 是一个无状态的协议,无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息,HTTP 遵循请求(Request)/应答(Response)模型,客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答,所有 HTTP 连接都被构造成一套请求和应答。
HTTP 请求/响应的步骤:
- 客户端连接到 Web 服务器:一个 HTTP 客户端,通常是浏览器,与 Web 服务器的 HTTP 端口(默认为80)建立一个 TCP 套接字连接;
- 发送 HTTP 请求:通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据四部分组成;
- 服务器接受请求并返回 HTTP 响应:Web 服务器解析请求,定位请求资源,服务器将资源复本写到 TCP 套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据四部分组成;
- 释放连接 TCP 连接:若 connection 模式为 close,则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接;若 connection 模式为 keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
- 客户端浏览器解析 HTML 内容:客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码,然后解析每一个响应头,响应头告知以下为若干字节的 HTML 文档和文档的字符集,客户端浏览器读取响应数据 HTML,根据 HTML 的语法对其进行格式化,并在浏览器窗口中显示。
步骤简述:
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的 HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 HTML 文本发送给浏览器;
- 释放 TCP 连接;
- 浏览器将该 HTML 文本并显示内容。
HTTP 请求/响应模型:
通俗点讲就是在浏览器地址栏输入一个 URL,按下回车之后便可观察到对应的页面内容,实际上,这个过程是浏览器先向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应,接着传回浏览器,由于响应里包含页面的源代码等内容,所以浏览器在对其进行解析,便将网页呈现出来。
HTTP 请求方法
HTTP/1.1 协议中共定义了八种方法(有时也叫“动作”),来表明 Request-URL 指定的资源不同的操作方式,HTTP1.0 定义了三种请求方法:GET,POST 和 HEAD 方法,HTTP1.1 新增的五种请求方法:OPTIONS,PUT,DELETE,TRACE 和 CONNECT 方法:
- OPTIONS:返回服务器针对特定资源所支持的 HTTP 请求方法,也可以利用向 web 服务器发送 ‘*’ 的请求来测试服务器的功能性;
- HEAD:向服务器索与 GET 请求相一致的响应,只不过响应体将不会被返回,这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应报头中的元信息;
- GET:向特定的资源发出请求,并返回实体主体;
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST 请求可能会导致新的资源的建立和/或已有资源的修改;
- PUT:向指定资源位置上传其最新内容;
- DELETE:请求服务器删除 Request-URL 所标识的资源;
- TRACE:回显服务器收到的请求,主要用于测试或诊断;
- CONNECT:把服务器仿作跳板,让服务器代替客户端访问其他网页。
最为常见的请求方法是 GET 和 POST,在浏览器地址栏输入一个 URL,按下回车,即发起了一个 GET 请求,请求的参数会直接包含到 URL 里;POST 请求大多在提交表单时发起,例如登录,输入用户名和密码,点击登录即发起一个 POST 请求,其数据通常以表单的形式传输,而不会体现在 URL 中,GET 和 POST 请求方法区别如下:
GET 请求中的参数包含在 URL 里,数据可以在 URL 中看到;而 POST 请求的 URL 不会包含这些数据,数据都是通过表单形式传输的,会包含在函数体中;
GET 请求提交的数据最多只有 1024 字节,POST 方式则没有限制;
GET 请求是不安全的,因为在传输过程中,参数数据直接暴露在 URL 上,所以不能用来传递敏感信息;
GET 请求参数会完整的保留在浏览器的历史记录中,POST 请求的参数不会保留;
GET 请求在浏览器回退的时候是无害的,POST 请求会再次提交数据;
GET 请求在浏览器中可以被主动 cache(缓存),而 POST 请求不会,可以手动设置;
GET 请求产生的 URL 地址是可以被 bookmark(添加书签)的,POST 请求不可以;
GET 请求只允许 ASCII 码,POST 请求没有限制,允许二进制数据;
GET 请求的执行效率比 POST 请求好;
对于 GET 请求,浏览器会把 http header 和 data 一起发送出去,服务器响应200,请求成功;
对于POST请求,浏览器先发送 header,服务器会响应100(已经收到请求的第一部分,正在等待其余部分),浏览器再次发送 data,服务器返回200,请求成功;
简而言之:GET 产生一个 TCP 数据包,POST 产生两个 TCP 数据包,不过并不是所有浏览器都会在 POST 中发送两次包,Firefox(火狐)就只发送一次;
HTTP 请求头
HTTP 请求头(HTTP Request Header)提供了关于请求,响应或者其他的发送实体的信息,HTTP 的头信息包括通用头、请求头、响应头和实体头四个部分:
- 通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联;
- 请求头标:允许客户端传递关于自身的信息和希望的响应形式;
- 响应头标:服务器和于传递自身信息的响应;
- 实体头标:定义被传送资源的信息,即可用于请求,也可用于响应。
每个头域由一个域名,冒号(:)和域值三部分组成,常用的 HTTP 请求头如下:
Accept:请求报头域,用于指定客户端可接受那些类型的信息;
Accept: application/json
浏览器可以接受服务器回发的类型为 application/json;Accept: */*
代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个);Accept-Encoding:用于指定客户端可接受的内容编码,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate);
Accept-Language:用于指定客户端可接受的语言类型(zh-cn,zh;q=0.5:支持的语言分别是简体中文和中文,优先支持简体中文);
Content-type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,在 HTTP 协议消息头中用来表示具体请求中的媒体类型信息(text/html:HTML 格式、image/gif:GIF 图片、application/json:JSON 类型、application/x-www-form-urlencoded:表单数据、multipart/form-data:表单文件上传等);
Host:请求报头域主要用于指定被请求资源的 Internet 主机和端口号,其内容为请求 URL 的原始服务器或网关的位置,从 HTTP1.1 版本开始,请求必须包含此内容;
Referer:用于标识请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等;
User-Agent:简称 UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息;
Connection:表示是否需要持久连接(HTTP 1.1默认进行持久连接);
Date:请求发送的日期和时间;
Expect:请求的特定的服务器行为;
Warning:关于消息实体的警告信息;
Max-Forwards:限制信息通过代理和网关传送的时间;
Cookie:主要功能更是维持当前访问会话,用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如 Cookie 会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个 Cookie 来存储相关信息,这样浏览器通过读取 Cookie 的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页;
HTTP 响应头
HTTP 响应头(HTTP Responses Header)中包含了服务器对请求的应答信息,HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文:
- 状态行:由 HTTP 协议版本号, 状态码, 状态消息 三部分组成;
- 消息报头:用来说明客户端要使用的一些附加信息;
- 空行:消息报头后面的空行是必须的;
- 响应正文:服务器返回给客户端的文本信息。
常用的 HTTP 响应头如下:
- Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求;
- Allow:对某网络资源的有效的请求行为,不允许则返回405;
- Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型;
- Content-Language:响应体的语言;
- Content-Length:响应体的长度;
- Content-Location:请求资源可替代的备用的另一地址;
- Content-Range:在整个返回体中本部分的字节位置;
- Content-Type:返回内容的 MIME 类型;
- Date:原始服务器消息发出的时间;
- Expires:响应过期的日期和时间,可以让代理服务器或浏览器将加载的内容更新到缓存中,当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载、缩短加载时间的目的;
- Location:用来重定向接收方到非请求 URL 的位置来完成请求或标识新的资源;
- Proxy-Authenticate:它指出认证方案和可应用到代理的该 URL 上的参数;
- refresh:应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持);
- Server:包含服务器的信息,例如名称、版本号等;
- Set-Cookie:设置 Http Cookie,响应头中的 Set-Cookie 用于告诉浏览器需要将此内容放在 Cookie 中,下次请求时将 Cookie 携带上;
- Warning:警告实体可能存在的问题;
- WWW-Authenticate:表明客户端请求实体应该使用的授权方案。
HTTP 响应状态码
1xx:该状态码表示临时响应并需要请求者继续执行操作
- 100(继续):请求者应当继续提出请求。服务器已收到请求的第一部分,正在等待剩余部分;
- 101(切换协议):请求者要求服务器切换协议,服务器也已确认切换协议;
2xx:该状态码表示成功
- 200(成功):服务器已成功处理请求。一般这表示服务器正常处理了请求,并且正常返回了相应的页面;
- 201(已创建):请求成功并且服务器成功创建新资源;
- 202(已接受):服务器已接收请求,但仍未处理;
- 203(非授权信息):服务器成功处理请求,但是返回的信息可能来自另外一来源;
- 204(无内容):服务器成功处理请求,但是没有返回任何内容;
- 205(重置内容):服务器成功处理请求,但没有返回任何内容;
- 206(部分内容):服务器成功处理了部分GET请求;
3xx:该状态码表示要完成请求,需要进一步操作,通常这些状态码用来重定向
- 300(多钟选择):针对请求,服务器可以执行多种操作。服务器可以根据请求者的(user-agent)选择一项操作,或者提供操作列表供请求者选择;
- 301(永久移动):请求的网页已永久移动到新的位置。服务器返回该状态码时,会自动将请求者转到新位置;
- 302(临时移动):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置进行后续的请求;
- 303(查看其它位置):请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此状态码;
- 304(未修改):自从上次请求后,请求的网页未修改过,服务器返回此状态码时,不会返回网页内容;
- 305(使用代理):请求者只能使用代理访问请求的网页;
- 307(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行后续请求;
4xx:表示请求可能出错,妨碍了服务器的处理
- 400(错误请求):表示客户端请求的语法错误,服务器无法理解;
- 401(未授权):请求要求身份验证。一般需要登录的网站,服务器可能会返回此状态码;
- 402:保留;
- 403(禁止):服务器理解请求客户端的请求,拒绝请求;
- 404(未找到):服务器无法根据客户端请求找到资源;
- 405(方法禁用):禁用请求中指定的方法;
- 406(不接受):无法使用请求的内容特性响应请求的网页;
- 407(需要代理授权):此状态码与401类似,但指定请求者应当授权使用代理;
- 408(请求超时):服务器等候请求时超时;
- 409(冲突):服务器在完成请求是发生冲突。服务器必须在响应中包含有关冲突的信息;
- 410(已删除):请求的资源已永久删除;
- 411(需要有效长度):服务器不接受不含有效内容长度标头字段的请求;
- 412(未满足前提条件):服务器未满足请求者在请求中设置的其中一个前提条件;
- 413(请求实体过大):相应实体过大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许处理的最大值;
- 414(请求的url过长):请求的url过长,服务器无法处理;
- 415(不支持的媒体类型):请求的格式不受请求页面的支持;
- 416(请求范围不符合要求):如果页面无法提供请求的范围,服务器则会返回此状态码;
- 417(未满足期望值):在请求头 Expect 指定的预期内容无法被服务器满足;
- 422(不可处理的实体):请求格式正确,但由于含有语义错误,无法响应;
5xx:表示服务器在尝试处理请求时发生内部错误,这些错误可能是服务器本身的错误,并不是请求出错,当然也有可能是请求者的故意为之,使服务器本身出现错误
- 500(服务器内部错误):服务器遇到一个未预料到的状况,导致无法完成对请求的处理;
- 501(尚未实施):服务器不具备完成请求的功能;
- 502(错误网关):服务器作为网关或者代理,从上游服务器收到无效响应;
- 503(服务不可用):服务器目前无法使用;
- 504(网关超时):服务器作为网关或代理,但未及时收到上游服务器的响应;
- 505(HTTP版本不受支持):服务器不支持请求中所用的 HTTP 版本。
相关文章:

【0基础学爬虫】爬虫基础之HTTP协议的基本原理介绍
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...

SpringBoot 整合定时任务
注解概览 EnableScheduling 在配置类上使用,开启计划任务的支持(类上) Scheduled 来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持) pom依赖 <parent…...

我的零分周赛:CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果、圆桌
CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果🍎、圆桌。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教…...

二、Java虚拟机的基本结构
Java虚拟机的架构1.内存结果概述2.类加载器子系统的作用3. 类加载器ClassLoader角色4.类的加载过程5.类加载器的分类1.引导类加载器(虚拟机自带的加载器)Bootstrap ClassLoader2.扩展类加载器(虚拟机自带的加载器) Extenssion ClassLoader3.应用程序类加载器(虚拟机自带的加载器…...

华为OD机试 - 用户调度(Python) | 机试题+算法思路+考点+代码解析 【2023】
用户调度 题目 在通信系统中有一个常见的问题是对用户进行不同策略的调度,会得到不同系统消耗的性能。 假设由N个待串行用户,每个用户可以使用A/B/C三种不同的调度策略。 不同的策略会消耗不同的系统资源,请你根据如下规则进行用户调度,并返回总的消耗资源数。 规则是: …...

HashMap(JDK1.8)源码+底层数据结构分析
HashMap 简介底层数据结构分析 JDK1.8 之前JDK1.8 之后 HashMap 源码分析 构造方法put 方法get 方法resize 方法 HashMap 常用方法测试 感谢 changfubai 对本文的改进做出的贡献! HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现…...

case的使用
1.x和z值 1.1.定义 x:表示不定值 z:表示高阻态,还有一种表达方式“?” 一个x/z可以用来定义十六进制(h)数的4位二进制的状态,八进制(o)数的3位,二进制&#x…...

Mac配置ITerm2
Mac配置ITerm2 install-shell-integration配置lrzsz配置zsh安装Oh-My-Zsh修改皮肤文件加载皮肤添加插件配置profiles 1.expect配置文件2.shell脚本 iterm2顶部白条闪烁 install-shell-integration 安装完成之后会有一个指示标,需要弄掉Preferences > Profiles …...

JUC并发编程(下)
✨作者:猫十二懿 ❤️🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 学习地址 写在最前 JUC并发编程(上) JUC(Java Util Concurrent)学习内容框架&…...

API接口的基础知识
API是应用程序编程接口(Application Programming Interface)的缩写,能够起到两个软件组件之间的连接器或中介的作用。此类接口往往通过一组明确的协议,来表示各种原始的请求和响应。API文档可以向开发人员展示请求和响应是如何形成…...

基于Spring Boot的教务管理系统
文章目录项目介绍主要功能截图:登录首页学生信息管理班级信息管理教师信息管理教师评价部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题…...

网页扫描图像并以pdf格式上传到服务器端
本文描述如何通过网页驱动扫描仪、高拍仪等图像扫描设备进行图像扫描,扫描结果经编辑修改后以pdf压缩格式上传到后台java程序中进行服务器端落盘保存。图像扫描上传如文字描述顺序所介绍,先要驱动扫描设备工作,进行纸张数据的光学扫描操作形成…...

Airbyte入门
Airbyte 后端技术栈Java 17框架:JerseyAPI: OAS3数据库:PostgreSQL单元和E2E测试:JUnit 5编排:Temporal连接器技术栈连接器可以用任何语言编写。但是,最常见的语言是:Python3.9.0Java 17前端技术…...

研究人员在野外发现大量的信息窃取者 “Stealc “的样本
一个名为Stealc的新信息窃取者正在暗网上做广告,它可能成为其他同类恶意软件的一个值得竞争的对象。 "SEKOIA在周一的一份报告中说:"威胁行为者将Stealc作为一个功能齐全、随时可用的窃取者,其开发依赖于Vidar、Raccoon、Mars和Re…...

数据结构——复杂度讲解(2)
作者:几冬雪来 时间:2023年2月22日 内容:数据结构复杂度讲解 目录 前言: 复杂度讲解(2): 1.空间复杂度是什么: 2.空间复杂度讲解: 结尾: 前言&#x…...

【LeetCode】任务调度器 [M](贪心)
621. 任务调度器 - 力扣(LeetCode) 一、题目 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&…...

Spring代理模式——静态代理和动态代理
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

Anaconda和PyCharm的一些安装问题和命令
今天更新了Windows上的Anaconda到2.3.2,PyCharm到2022.3。 ——发现是纯纯的犯贱orz。出了一堆问题。在这里记录一下供后来者参考。 Anaconda安装 将.\anaconda3\Scripts 和.\anaconda3\Library\bin添加到系统环境变量中。 新建环境的目录在.\anaconda3\envs下 N…...

sql优化建议
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 应尽量避免在 where 子句中使用!或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 应尽量避免在 where 子句中对字段进行 null 值判断&a…...

google hacker语句
哎,我就是沾边,就是不打实战( ̄o ̄) . z Z 文章目录前言一、什么是谷歌Docker?二、受欢迎的谷歌docker语句谷歌docker的例子日志文件易受攻击的 Web 服务器打开 FTP 服务器SSH私钥电子邮件列表实时摄像机MP3、电影和 PDF…...

Spring AOP
Spring AOP 文章目录Spring AOP1.概念1.面向切面编程2.AOP的目的3.AOP实现的分类4.AOP 术语2. Spring AOP的特性1.能力与目标2.AOP机制1.理解SpringAOP的代理2.AOP代理类的自调用代码的粒度如何让自调用走代理?3.Enabling AspectJ Support3. 定义切面与切点1. 声明切…...

【消费战略方法论】认识消费者的恒常原理(一):消费者稳态平衡原理
“消费战略”是塔望咨询基于大量的战略与营销实践经验结合心理学、经济学、传播学等相关专业学科的知识应用进行提炼与创造形成的战略方法体系。消费战略强调以消费者为导向,进行企业、品牌战略、品牌营销的制订和落地,企业经营的每个环节和输出的每个动…...

python居然能语音控制电脑壁纸切换,只需60行代码
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 家在日常的电脑使用中,都会有自己喜爱类型的桌面 单纯的桌面有时候会让人觉得单调 今天,就由我带领大家只用60行代码打造一款语音壁纸切换器程序, 让大家能够通过语音的方式来控制电脑去…...

内存泄露定位手段(c语言hook malloc相关方式)
如何确定有内存泄露问题,如何定位到内存泄露位置,如何写一个内存泄漏检测工具? 1:概述 内存泄露本质:其实就是申请调用malloc/new,但是释放调用free/delete有遗漏,或者重复释放的问题。 内存…...

STM32 CAN波特率计算
STM32 CAN波特率计算简介CAN总线收发,中断方式接收配置代码部分reference简介 CAN通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔,本文这里以数据帧为例。 显性电平对应逻辑0,CAN_H和CAN_L之差为2.5V左右。而隐性电平对应逻辑1&#x…...

C/C++ 中#define 的妙用,让代码更美一些
C/C 中#define 的妙用,让代码更美一些 flyfish 1 数值类型输出易读的字符串形式 例如使用enum定义一些错误值,想要将数值类型的错误,输出易读的字符串形式 重要的一句代码 #define MAKE_PAIR(val) std::make_pair(val, #val)可以看到 #va…...

Linux文件系统操作与磁盘管理
查看磁盘和目录的容量 使用 df 命令查看磁盘的容量 df在实验楼的环境中你将看到如下的输出内容: 但在实际的物理主机上会更像这样: 物理主机上的 /dev/sda2 是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母 a 表示…...

【Python】批量采集原神表情包~
嗨害大家好鸭~我是小熊猫(✿◡‿◡) 最近迷上了原神, 不自觉中就很喜欢保存广大旅行者制作的表情包~ 真的很有意思诶~ 源码资料电子书:点击此处跳转文末名片获取 一个个保存的话,好像效率很低嘛… 那我就发挥我小熊猫的老本行直接给把他们全部采集下…...

C语言基本语法注释类型关键字
C 基本语法 标识符 给变量所取的名字叫变量名,定义变量的名字需要遵循标识符的命名规则。 标识符是用来标识变量、符号常量、数组、函数、文件等名字的有效字符序列。 标识符的命名规则: 1.只能由字母、数字和下划线组成(例如:…...

【C ++】C++入门知识(二)
C入门(二) 作者:小卢 专栏:《C》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 1.引用 1.1.引用的概念及应用 引用(&) 引用不是新定义一个变量࿰…...