[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(1)知识基础
[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(1)知识基础
@水墨不写bug
文章目录
- (一)概念梳理
- 1.什么是协议?
- 2.什么是应用层?
- 3. 为什么要进行分层?
- (二)HTTP协议
- 2.1 初识HTTP协议
- 2.2HTTP协议的URL
- 2.2.1域名
- 2.2.2端口号
- 2.2.3 web根目录
- 2.2.4 什么是资源
- 2.2.5 URL总结
- 2.3 HTTP协议的报文
- 2.3.1 HTTP请求报文结构
- i. 请求行(Request Line)
- ii. 请求字段(Request Headers)
- HTTP请求头中常见的Key-Value字段
- iii. 空行(Empty Line)
- iv. 请求正文(Request Body)
- 2.3.2完整HTTP请求报文示例
- 示例1:GET请求(无正文)
- 示例2:POST请求(含JSON正文)
- HTTP请求报文各部分的作用总结:
- HTTP请求报文注意事项:
- 2.3.3 HTTP响应报文结构
- i. 状态行(Status Line)
- ii. 响应头(Response Headers)
- iii. 空行(Empty Line)
- iv. 响应正文(Response Body)
- 完整HTTP响应报文示例
- 示例1:成功响应(HTML页面)
- 示例2:客户端错误(404 Not Found)
- 各部分的核心作用总结
- 关键注意事项
(一)概念梳理
1.什么是协议?
在现实生活中,协议
是一种约定,经过多方的同意最终合作完成一件事情。
在网络的中,计算机要帮助用户完成各种工作,包括用户之间的远程通信
!
具体来说,协议就是通信双方都认识的结构化的数据类型,比如一个结构体类型
,由于双方都事先通知了对方,所以一方可以结构化的向对方发送数据,并且对方也可以把收到的结构化的数据正确的解析出来。
协议一般都有报头和有效载荷,报头是协议规定好的特定位置存储特定结构数据的头部;有效载荷就是将要传输的数据本身。
**举一个形象的例子:**报头和有效载荷的关系其实就像你发的快递的快递单和快递的关系(报头其实就是一个快递单,它记录的这个快递的相关信息,比如发送方是谁,接受方是谁;而有效载荷就是快递的内容)
报头和有效载荷共同构成了一个报文!
2.什么是应用层?
说到应用层就不得不提到网络协议栈的分层。**网络协议栈的5层(4层)协议分层是对OSI的七层模型的简化版本。**
OSI的七层模型:
OSI的七层分层是非常完善的,它综合考虑了各行各业的,各个厂商在实现的时候按照OSI的七层协议进行。
但是经过实践,人们发现七层协议太过冗余,于是把OSI的七层分层简化为5(或者4)层
,形成了如今的网络协议栈
。
网络协议栈的5(4)层分层:
而应用层就是网络协议栈的最上面的一层,因为它最贴近实际应用,因而被称为
引用层
。
3. 为什么要进行分层?
协议本质上是软件,在设计上的分层是为了更好的进行模块化设计
,便于解耦和
,设计为层状的结构优势在于:
一层出现问题,可以快速定位,便于快速找到问题所在,同时分层后的软件层之间相互不影响,这也就让软件的维护成本更低。
(二)HTTP协议
2.1 初识HTTP协议
协议看似“高大上”,其实我们每个人都可以定义一个协议,但是由于我们每一个人定义协议时考虑的内容不同,所以有很大的可能定义出来的协议五花八门。
但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。
HTTP
(HyperText Transfer Protocol, 超文本传输协议) 是一个应用广泛所以至关重要的协议。通过这个“超文本”传输协议我们不仅可以传输文字内容(txt)
,也可传输图片(gpj)
,音频(mp3)
,甚至是视频(mp4)
文件。
此外,HTTP协议是无连接,无状态
的协议,即每次请求都需要建立新的链接,且服务器不会保存客户端信息。
2.2HTTP协议的URL
随便打开一个网页,我们就可以看到网址一栏特有的内容:
这个网页使用的是
HTTPS
协议,但是HTTPS是对HTTP的完善,分析HTTPS的URL和讲解HTTP的URL并不冲突。
2.2.1域名
如图,这一串内容就是URL
:
其中前面部分被称为域名,域名本质是IP地址,HTTP的接收方会自动把接收到的域名转化为IP地址,这个过程称为DNS
。
2.2.2端口号
我们知道,网络通信本质就是进程间的通信
,只有通过IP+端口
才能确定两个特定的进程。
HTTP协议由于广为人知,所以其端口号被规定为80
,为了方便起见,一般的浏览器会自动在域名后面加上端口号80。
一般而言,协议名称和端口号是强关联的,比如HTTP的知名端口号为80;这意味着:当浏览器发起请求时,会自动拼接端口号80。
2.2.3 web根目录
与Linux的根目录不同,每一台web服务器都可以设置一个web根目录
,用于存储服务器的资源。
web根目录的名称一般设置为wwwroot
,以这个目录为根,形成了一颗目录树,这就给用户一种错觉:仿佛在访问服务器的根目录下的资源。
2.2.4 什么是资源
资源指的是网页,图片,视频,音频等超文本内容,这些资源在被获取之前,存储在服务端。(即Linux的某目录的文件)
2.2.5 URL总结
URL前半部分是IP和端口
。
URL后半部分(域名和端口号后面部分)是服务端主机上的一个资源的相对路径
。(这个路径标识了服务端机器上的某一资源的唯一性)。此外,这个路径不是服务器主机的根目录,而是web根目录
。
2.3 HTTP协议的报文
在网络传输的时候,HTTP协议的报文有自己的约定好的格式。
HTTP报文是客户端与服务器之间通信的核心载体,主要分为请求报文和响应报文。
2.3.1 HTTP请求报文结构
以上是
HTTP请求报文
结构的基本格式,接下来我将会分别讲解这个格式的各个部分的内容,以及它们在网络传输中的作用。
i. 请求行(Request Line)
- 格式:
请求方法 空格 URI 空格 HTTP版本 换行符
- 作用:定义请求的基本操作、目标资源和协议版本。
- 示例:
GET /index.html?name=ddsm HTTP/1.1\r\n
- 请求方法:
GET
(获取资源)。 - URI:
/index.html?name=ddsm
(请求路径和查询参数)。 - HTTP版本:
HTTP/1.1
。
- 请求方法:
常见请求方法:
GET
:获取资源(无请求正文)。POST
:提交数据(有请求正文)。PUT
:更新服务器上的资源。DELETE
:删除服务器上的资源。
其中,在网络传输中,最重要最常用(95%以上
)的方法就是GET
和POST
;其他的方法都基本上不使用。
ii. 请求字段(Request Headers)
- 格式:
Key:[空格]Value 换行符
(key-value键值对) - 作用:传递附加信息(如客户端信息、内容类型、认证等)。
- 示例:
Host: www.ddsm.com\r\n User-Agent: Mozilla/5.0 (Windows NT 10.0)\r\n Accept: text/html\r\n Content-Type: application/json\r\n Content-Length: 28\r\n \r\n
- Host:目标服务器域名(HTTP/1.1必须)。
- User-Agent:客户端信息(浏览器或工具标识),OS信息(包括版本)。
- Accept:客户端可接收的响应类型。
- Content-Type:请求正文的数据类型(如JSON、表单)。
- Content-Length:请求正文的字节长度(POST/PUT需指定)。
HTTP请求头中常见的Key-Value字段
以下是HTTP请求报文中常见的请求头(Request Headers)
字段及其作用与示例:
字段名称 | 示例值 | 作用说明 |
---|---|---|
Host | Host: www.ddsm.com | 指定请求的目标服务器域名(HTTP/1.1必须字段)。 |
User-Agent | User-Agent: Mozilla/5.0 (Windows NT 10.0) | 标识客户端信息(浏览器信息、操作系统信息(包括版本)、硬件设备信息等)。 |
Accept | Accept: text/html, application/json | 声明客户端可接收的响应内容类型。 |
Content-Type | Content-Type: application/json | 指定请求正文的数据格式(如JSON、表单、文件)。 |
Content-Length | Content-Length: 4096 | 声明请求正文的字节长度(POST/PUT请求必须)。 |
Authorization | Authorization: Beabd125 | 携带认证凭证(如Token、Basic Auth)。 |
Cookie | Cookie: session_id=xyzabc123 | 向服务器发送客户端存储的Cookie。 |
Connection | Connection: keep-alive | 控制连接是否保持活跃(keep-alive 表示长连接,close 表示短连接)。 |
Accept-Encoding | Accept-Encoding: gzip, deflate | 声明客户端支持的压缩算法(如gzip,zip等)。 |
Referer | Referer: https://www.google.com | 表示当前请求的来源页面URL(用于防盗链或统计)。 |
Cache-Control | Cache-Control: no-cache | 控制缓存行为(如max-age=3600 、no-store )。 |
Accept-Language | Accept-Language: en-US, zh-CN | 声明客户端优先接收的语言类型。 |
iii. 空行(Empty Line)
- 格式:
换行符
- 作用:分隔请求头和请求正文,表示头部结束。
- 示例:
\r\n
iv. 请求正文(Request Body)
- 格式:任意数据(如JSON、表单数据、文件)。
- 作用:携带需要提交到服务器的数据。
- 示例(POST请求):
{"username": "john", "password": "123"}
- 适用场景:
POST
、PUT
等需要传输数据的请求方法。
- 适用场景:
2.3.2完整HTTP请求报文示例
示例1:GET请求(无正文)
GET /search?q=http HTTP/1.1\r\n
Host: www.google.com\r\n
User-Agent: Chrome/120.0\r\n
Accept: text/html\r\n
\r\n
示例2:POST请求(含JSON正文)
POST /api/login HTTP/1.1\r\n
Host: example.com\r\n
Content-Type: application/json\r\n
Content-Length: 28\r\n
\r\n
{"username": "ddsm", "password": "190"}
HTTP请求报文各部分的作用总结:
部分 | 核心作用 |
---|---|
请求行 | 定义请求动作、目标资源和协议版本。 |
请求头 | 传递附加信息(如身份认证、数据类型、缓存策略等)。 |
空行 | 分隔请求头和正文,避免数据混淆。 |
请求正文 | 携带需要传输的数据(如表单提交、文件上传)。 |
HTTP请求报文注意事项:
- 换行符:HTTP规范要求使用
\r\n
(CRLF)作为换行符。 - Host头:HTTP/1.1中必须包含,用于指定服务器域名。
- Content-Length:正文长度必须与实际数据一致,否则可能引发错误。
2.3.3 HTTP响应报文结构
HTTP响应报文是服务器对客户端请求的回复,主要包含状态行、响应头、空行和响应正文。
i. 状态行(Status Line)
- 格式:
HTTP版本 空格 状态码 空格 状态码描述 换行符
- 作用:告知客户端请求的处理结果(成功、重定向、客户端错误或服务器错误)。
- 示例:
HTTP/1.1 200 OK\r\n
- HTTP版本:
HTTP/1.1
(服务器使用的协议版本)。 - 状态码:
200
(表示请求成功)。 - 状态码描述:
OK
(人类可读的简短描述)。
- HTTP版本:
状态码分类:
1xx
:信息性状态码(如101 Switching Protocols
)。2xx
:成功状态码(如200 OK
、201 Created
)。3xx
:重定向状态码(如301 Moved Permanently
、302 Found
)。4xx
:客户端错误(如404 Not Found
、400 Bad Request
)。5xx
:服务器错误(如500 Internal Server Error
、503 Service Unavailable
)。
但是一般而言,这些状态码并不会被服务器严格遵守。
ii. 响应头(Response Headers)
- 格式:
Key: Value 换行符
- 作用:提供响应的元数据(如内容类型、服务器信息、缓存策略等)。
- 示例:
Server: nginx/1.18.0\r\n Date: Mon, 01 Jan 2024 12:00:00 GMT\r\n Content-Type: text/html\r\n Content-Length: 127\r\n Set-Cookie: session_id=abc123; Path=/\r\n \r\n
- Server:服务器软件信息(如Nginx、Apache)。
- Content-Type:响应正文的数据类型(如
text/html
、application/json
)。 - Content-Length:响应正文的字节长度。
- Set-Cookie:向客户端设置Cookie。
iii. 空行(Empty Line)
- 格式:
换行符
- 作用:分隔响应头和响应正文,表示头部结束。
- 示例:
\r\n
iv. 响应正文(Response Body)
- 格式:任意数据(如HTML页面、JSON数据、文件)。
- 作用:包含服务器返回的实际内容。
- 示例(HTML响应):
<!DOCTYPE html> <html><body>Hello, World!</body> </html>
完整HTTP响应报文示例
示例1:成功响应(HTML页面)
HTTP/1.1 200 OK\r\n
Server: Apache/2.4.41\r\n
Date: Mon, 01 Jan 2024 12:00:00 GMT\r\n
Content-Type: text/html\r\n
Content-Length: 127\r\n
\r\n
<!DOCTYPE html>
<html><body>Welcome to Example.com</body>
</html>
示例2:客户端错误(404 Not Found)
HTTP/1.1 404 Not Found\r\n
Server: nginx/1.18.0\r\n
Content-Type: application/json\r\n
Content-Length: 35\r\n
\r\n
{"error": "Resource not found"}
各部分的核心作用总结
部分 | 核心作用 |
---|---|
状态行 | 反馈请求处理结果(成功、失败、重定向等)。 |
响应头 | 提供服务器信息、内容类型、缓存控制等元数据。 |
空行 | 分隔头部与正文,避免数据混淆。 |
响应正文 | 返回客户端请求的实际数据(如HTML、JSON、文件)。 |
关键注意事项
- 状态码是固定的:状态码描述(如
OK
)可能因服务器而异,但状态码(如200
)是标准化的。 - Content-Type必须准确:若响应是JSON但声明为
text/html
,客户端可能解析失败。 - Content-Length一致性:需与正文实际字节数一致,否则可能截断数据或读取错误。
通过分析响应报文,可以快速定位问题(如4xx
表示客户端错误,5xx
表示服务器错误),并优化前后端交互逻辑。
未完待续~
转载请注明出处
相关文章:
[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(1)知识基础
[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(1)知识基础 水墨不写bug 文章目录 (一)概念梳理1.什么是协议?2.什么是应用层?3. 为什么要进行分层? (二)HTTP协议2.1 初识HTTP协议2.2HTTP协议的URL2.2.1域名2.2.2端口号2…...
机票改签请求
示例代码: tool def update_ticket_to_new_flight(ticket_no: str, new_flight_id: int) -> str:"""Update the users ticket to a new valid flight.Args:ticket_no (str): The ticket number to be updated.new_flight_id (int): The ID of th…...
linux下文件读写操作
Linux下,文件I/O是操作系统与文件系统之间进行数据传输的关键部分。文件I/O操作允许程序读取和写入文件,管理文件的打开、关闭、创建和删除等操作。 1. 文件描述符 在Linux中,每个打开的文件都由一个文件描述符来表示。文件描述符是一个非负…...
命名管道的创建和通信实现
目录 命名管道的创建 使用函数创建命名管道的通信 预备创建 makefile设计 server.hpp设计 clent.hpp设计 comm.hpp设计 server.cc设计 clent.cc设计 测试运行 今天我们来学习命名管道 由于匿名管道(pipe())无法在两个毫不相干的进程之间进行通…...
C++和OpenGL实现3D游戏编程【连载24】——父物体和子物体之间的坐标转换
欢迎来到zhooyu的C++和OpenGL游戏专栏,专栏连载的所有精彩内容目录详见下边链接: 🔥C++和OpenGL实现3D游戏编程【总览】 父子物体的坐标转换 1、本节要实现的内容 前面章节我们了解了父物体与子物体的结构,它不仅能够表示物体之间的层次关系,更重要的一个作用就是展示物…...
21.HarmonyOS Next CustomSlider组件步长控制教程(三)
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 文章目录 1. 步长控制概述2. 步长基本概念2.1 什么是步长?2.2 步长的作用 3. 设置步长3.1 基本参数3.2 代码示例 4. 步长与范围的关系4…...
小白学习:rag向量数据库
学习视频: https://www.bilibili.com/video/BV11zf6YyEnT/?spm_id_from333.337.search-card.all.click 例子: 用户提出问题 客服机器人基于rag回答用户问题 过程拆解: 客户问题 – 转化为向量表示 – 在向量数据库中进行相似性搜索 – 系…...
STM32 CAN模块原理与应用详解
目录 概述 一、CAN模块核心原理 1. CAN协议基础 2. STM32 CAN控制器结构 3. 波特率配置 二、CAN模块配置步骤(基于HAL库) 1. 初始化CAN外设 2. 配置过滤器 3. 启动CAN通信 三、数据收发实现 1. 发送数据帧 2. 接收数据帧(中断方式…...
NO.29十六届蓝桥杯备战|string九道练习|reverse|翻转|回文(C++)
P5015 [NOIP 2018 普及组] 标题统计 - 洛谷 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int sz s.size();int cnt 0;for (int i 0; i < sz; i){if (isspace(s[i]))continue…...
最新版本TOMCAT+IntelliJ IDEA+MAVEN项目创建(JAVAWEB)
前期所需: 1.apache-tomcat-10.1.18-windows-x64(tomcat 10.1.8版本或者差不多新的版本都可以) 2.IntelliJ idea 24年版本 或更高版本 3.已经配置好MAVEN了(一定先配置MAVEN再搞TOMCAT会事半功倍很多) 如果有没配置…...
MAC-禁止百度网盘自动升级更新
通过终端禁用更新服务(推荐) 此方法直接移除百度网盘的自动更新组件,无需修改系统文件。 步骤: 1.关闭百度网盘后台进程 按下 Command + Space → 输入「活动监视器」→ 搜索 BaiduNetdisk 或 UpdateAgent → 结束相关进程。 2.删除自动更新配置文件 打开终端…...
Unity DOTS从入门到精通之EntityCommandBufferSystem
文章目录 前言安装 DOTS 包ECBECB可以执行的指令示例: 前言 DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世界游…...
【AIGC系列】6:HunyuanVideo视频生成模型部署和代码分析
AIGC系列博文: 【AIGC系列】1:自编码器(AutoEncoder, AE) 【AIGC系列】2:DALLE 2模型介绍(内含扩散模型介绍) 【AIGC系列】3:Stable Diffusion模型原理介绍 【AIGC系列】4࿱…...
【Linux】使用问题汇总
#1 ssh连接的时候报Key exchange failed 原因:服务端版本高,抛弃了一些不安全的交换密钥算法,且客户端版本比较旧,不支持安全性较高的密钥交换算法。 解决方案: 如果是内网应用,安全要求不这么高…...
nnUNet V2修改网络——全配置替换MultiResBlock模块
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 MultiRes Block 是 MultiResUNet 中核心组件之一,旨在解决传统 U-Net 在处理多尺度医学图像时的局…...
Git合并工具在开发中的使用指南
在团队协作开发中,Git 是最常用的版本控制工具,而代码合并(Merge)是多人协作不可避免的环节。当多个开发者同时修改同一文件的相同区域时,Git 无法自动完成合并,此时需要借助合并工具(Merge Too…...
AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录
AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录 一、AutoDl平台租用GPU 1.注册并登录AutoDl官网:https://www.autodl.com/home 2.选择算力市场,找到需要的GPU: 我这里选择3090显卡 3.这里我们就选择P…...
listen EACCES: permission denied 0.0.0.0:811
具体错误 npm run serve> bige-v0.0.0 serve > viteThe CJS build of Vites Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details. error when starting dev server: Error: listen EACCES: per…...
OpenAI API模型ChatGPT各模型功能对比,o1、o1Pro、GPT-4o、GPT-4.5调用次数限制附ChatGPT订阅教程
本文包含OpenAI API模型对比页面以及ChatGPT各模型功能对比表 - 截至2025最新整理数据:包含模型分类及描述;调用次数限制; 包含模型的类型有: Chat 模型(如 GPT-4o、GPT-4.5、GPT-4)专注于对话,…...
六十天前端强化训练之第十五天React组件基础案例:创建函数式组件展示用户信息(第15-21天:前端框架(React))
欢迎来到编程星辰海的博客讲解 我们已经学了14天了,再坚持坚持,马上我们就可以变得更优秀了,加油,我相信大家,接下来的几天,我会给大家更新前端框架(React),看完可以给一…...
北大一二三四版全套DeepSeek教学资料
DeepSeek学习资料合集:https://pan.quark.cn/s/bb6ebf0e9b4d DeepSeek实操变现指南:https://pan.quark.cn/s/76328991eaa2 你是否渴望深入探索人工智能的前沿领域?是否在寻找一份能引领你从理论到实践,全面掌握AI核心技术的学习…...
计算机网络:计算机网络的组成和功能
计算机网络的组成: 计算机网络的工作方式: 计算机网络的逻辑功能; 总结: 计算机网络的功能: 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点(计算机或设备&…...
管理网络安全
防火墙在 Linux 系统安全中有哪些重要的作用? 防火墙作为网络安全的第一道防线,能够根据预设的规则,对进出系统的网络流量进行严格筛选。它可以阻止未经授权的外部访问,只允许符合规则的流量进入系统,从而保护系统免受…...
音频进阶学习十九——逆系统(简单进行回声消除)
文章目录 前言一、可逆系统1.定义2.解卷积3.逆系统恢复原始信号过程4.逆系统与原系统的零极点关系 二、使用逆系统去除回声获取原信号的频谱原系统和逆系统幅频响应和相频响应使用逆系统恢复原始信号整体代码如下 总结 前言 在上一篇音频进阶学习十八——幅频响应相同系统、全…...
Redis7系列:设置开机自启
前面的文章讲了Redis和Redis Stack的安装,随着服务器的重启,导致Redis 客户端无法连接。原来的是Redis没有配置开机自启。此文记录一下如何配置开机自启。 1、修改配置文件 前面的Redis和Redis Stack的安装的文章中已经讲了redis.config的配置…...
word甲烷一键下标
Sub 甲烷下标()甲烷下标 宏Selection.Find.ClearFormattingSelection.Find.Replacement.ClearFormattingWith Selection.Find.Text "CH4".Replacement.Text "CHguoshao4".Forward True.Wrap wdFindContinue.Format False.MatchCase False.MatchWhole…...
SSH 连接中主机密钥验证失败问题的解决方法
问题描述 在尝试通过 SSH 建立连接时,出现以下错误信息: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack…...
网络安全工具nc(NetCat)
NetCat是一个非常简单的Unix工具,可以读、写TCP或UDP网络连接(network connection)。它被设计成一个可靠的后端(back-end)工具,能被其它的程序程序或脚本直接地或容易地驱动。同时,它又是一个功能丰富的 网络调试和开发工具,因为它…...
探索在生成扩散模型中基于RAG增强生成的实现与未来
概述 像 Stable Diffusion、Flux 这样的生成扩散模型,以及 Hunyuan 等视频模型,都依赖于在单一、资源密集型的训练过程中通过固定数据集获取的知识。任何在训练之后引入的概念——被称为 知识截止——除非通过 微调 或外部适应技术(如 低秩适…...
【Linux】37.网络版本计算器
文章目录 1. Log.hpp-日志记录器2. Daemon.hpp-守护进程工具3. Protocol.hpp-通信协议解析器4. ServerCal.hpp-计算器服务处理器5. Socket.hpp-Socket通信封装类6. TcpServer.hpp-TCP服务器框架7. ClientCal.cc-计算器客户端8. ServerCal.cc-计算器服务器9. 代码时序1. 服务器启…...
3.6c语言
#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…...
【 IEEE出版 | 快速稳定EI检索 | 往届已EI检索】2025年储能及能源转换国际学术会议(ESEC 2025)
重要信息 主会官网:www.net-lc.net 【论文【】投稿】 会议时间:2025年5月9-11日 会议地点:中国-杭州 截稿时间:见官网 提交检索:IEEE Xplore, EI Compendex, Scopus 主会NET-LC 2025已进入IEEE 会议官方列表!&am…...
JVM常用概念之本地内存跟踪
问题 Java应用启动或者运行过程中报“内存不足!”,我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言,需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构,来保证JVM应用的成功启动以及未来平…...
JVM 的主要组成部分及其作用?
创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执…...
从能耗监测到碳资产管理:智慧校园能源管理平台的迭代升级与实践启示
一、核心价值提炼 随着我国能源结构转型的持续优化和“双碳”目标的明确,构建现代化能源体系已成为国家发展的重要战略。在这一背景下,校园作为能源消耗的重要领域,其能源管理的智能化、绿色化转型显得尤为重要。本文将深入探讨校园智慧能源…...
数据库核心-redo、undo
一、redo日志 InnoDB操作以页为单位操作数据。并且首先操作内存中缓冲池的数据,然后刷新到disk中,但如果事务提交后宕机、未能刷新到disk中,就会造成不一致情况。 重做日志: 系统重启时按照修改步骤重新更新数据页 redo日志占用…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_core_module
定义在 src\core\nginx.c ngx_module_t ngx_core_module {NGX_MODULE_V1,&ngx_core_module_ctx, /* module context */ngx_core_commands, /* module directives */NGX_CORE_MODULE, /* module type */NULL…...
SQLAlchemy系列教程:如何执行原生SQL
Python中的数据库交互提供了高级API。但是,有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射(ORM)功能而闻名ÿ…...
怎么实现: 大语言模型微调案例
怎么实现: 大语言模型微调案例 目录 怎么实现: 大语言模型微调案例输入一个反常识的问题:首都在北京天安门之后对输出模型进行测试:首都在北京天安门微调代码:测试微调模型代码:微调输出模型结构输出模型参数大小对比Qwen 2.5_0.5:53MB输出模型:951MB 是一样的,没有进行…...
【Linux内核系列】:深入理解缓冲区
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz ★★★ 本文前置知识: 文件系统以及相关系统调用接口 输入以及输出重定向 那么在此前的学习中,我们了解了文件的概念以及相关的系统调用接口,并…...
【Qt】成员函数指针
一、成员函数指针的本质 与普通函数指针的区别: // 普通函数指针 void (*funcPtr)() &普通函数;// 成员函数指针 void (MyClass::*memberFuncPtr)() &MyClass::成员函数;• 绑定对象:成员函数指针必须与类的实例对象结合使用 • 隐含 this 指…...
关于 Can Utils 的详细介绍、使用方法及配置指南
Can Utils:开源CAN总线工具集合 一、Can Utils简介 Can Utils 是一组开源的CAN总线工具链,专为嵌入式开发者和网络诊断工程师设计,支持Linux、Windows和macOS系统。它包含一系列轻量级命令行工具(如 cantoolz、candump、canbus …...
【Academy】OAuth 2.0 身份验证漏洞 ------ OAuth 2.0 authentication vulnerabilities
OAuth 2.0 身份验证漏洞 ------ OAuth 2.0 authentication vulnerabilities 1. 什么是 OAuth?2. OAuth 2.0 是如何工作的?3. OAuth 授权类型3.1 OAuth 范围3.2 授权代码授权类型3.3 隐式授权类型 4. OAuth 身份验证4.1 识别 OAuth 身份验证4.2 侦察OAuth…...
dify中使用NL2SQL
在 Dify 工作流中融入 NL2SQL(自然语言转 SQL)之能力,可依循如下步骤达成,借由 Dify 的模块化设计以及模型编排之功能,优化数据库查询之智能化交互: 一、环境准备与 Dify 部署 安装 Docker 与 Dify 务须确…...
android viewmodel如何使用
嗯,我现在要学习如何在Android中使用ViewModel。我之前听说过ViewModel是用来管理UI相关数据的,这样在配置变化比如屏幕旋转时数据不会丢失。但具体怎么用呢?我需要先回忆一下相关的知识。 首先,ViewModel应该是Android Architec…...
蓝桥杯备赛-基础训练(四)字符串 day17
好久不见,今天开始继续更新,或许拿不了奖,但是希望记录自己学习的过程,如果感觉有收获的同学在下面多多评论说说我代码的缺陷,感谢大家! 1、反转字符串 编写一个函数,其作用是将输入的字符串反…...
AI Agent开发框架分析:前端视角
1. Mastra (https://mastra.ai/docs) 优点: 提供直观的界面构建器,适合无代码/低代码开发支持JavaScript/TypeScript,可直接集成到前端项目可视化工作流设计,降低入门门槛内置多种UI组件,加速前端开发 缺点…...
第3节:IP地址分类与子网划分实战指南
IP地址分类与子网划分实战指南:从小白到入门 在网络通信中,IP地址是设备之间相互识别和通信的基础。无论是家庭网络还是企业网络,IP地址的分配和管理都是网络运维的核心任务之一。然而,对于初学者来说,IP地址的分类、子网掩码、CIDR(无类别域间路由)和VLSM(可变长子网…...
贪心算法三
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…...
pytest基础知识
pytest知识了解 pytest的基础知识了解:Python测试框架之pytest详解_lovedingd的博客-CSDN博客_pytest框架 (包含设置断点,pdb,获取最慢的10个用例的执行耗时) pytest-pytest.main()运行测试用例,pytest参数: pytest-…...