HTTP是什么?
HTTP(超文本传输协议)就像是我们上网时的"快递系统"。当你在浏览器地址栏输入网址时:
1. 你的浏览器(客户端)→ 发送请求
-
就像你打电话给餐厅:"我要一份宫保鸡丁"
-
浏览器发送HTTP请求:"我要访问这个网页"
2. 服务器→ 返回响应
-
餐厅给你送来宫保鸡丁
-
服务器返回HTML网页内容
你输入网址后发生了什么?
1. 输入网址:http://192.168.1.100
↓
2. 浏览器打包请求(HTTP请求)
↓
3. 通过网络发送到BMS板子
↓
4. BMS板子收到请求
↓
5. BMS板子准备网页内容
↓
6. BMS板子发送回浏览器(HTTP响应)
↓
7. 浏览器显示网页
BMS板子作为Web服务器
你的BMS板子就像一个"微型餐厅",它:
-
监听端口(通常是80端口):就像餐厅在门口等客人
-
存储网页文件:板子里面有HTML文件
-
处理请求:收到请求后,把网页发给你
实际例子
假设你的BMS板子IP是192.168.1.100:
-
你在浏览器输入 :
http://192.168.1.100 -
BMS板子收到:"有人要访问我"
-
BMS板子响应:"这是我的网页内容"
-
你看到:电池电压、电流、温度等信息
网页内容从哪里来?
BMS板子的网页通常是:
-
静态HTML文件:提前写好的网页,显示固定的界面
-
动态数据:板子实时读取电池数据,插入到网页中
比如网页代码可能是:
<html>
<body>
<h1>BMS监控面板</h1>
<p>电池电压:14.8V</p>
<p>电流:2.1A</p>
</body>
</html>
简单总结
-
HTTP就是"请求-响应"的通信方式
-
你的BMS板子是个小型Web服务器
-
它提供网页界面,让你能查看电池状态
-
就像用手机APP,只不过用的是浏览器
HTTP就是一问一答的通信模式:
第一次访问(获取完整网页)
浏览器:我要看你的主页
BMS板子:好的,这是完整的网页代码
点击操作(新的请求)
你点击"刷新数据"按钮
浏览器:请给我最新的电池数据
BMS板子:好的,这是更新后的数据
通信的本质
每次交互都是:
-
客户端发送请求(浏览器→BMS)
-
服务器处理请求(BMS读取传感器)
-
服务器返回响应(BMS发送数据)
-
客户端显示结果(浏览器更新界面)
就像微信聊天一样,每条消息都是一次独立的通信!
传统上位机 vs Web界面
传统上位机(你原来的理解)
上位机软件(安装在电脑上)
↓ 主动询问
BMS板子(被动回答)
↑ 返回数据
特点:
-
上位机是"老大",主动发号施令
-
板子是"小弟",被动回答问题
-
软件装在电脑上,界面固定不变
Web界面(BMS板子的新方式)
浏览器(空壳子,什么都没有)
↓ 请求网页
BMS板子(变身Web服务器)
↑ 返回完整网页+数据
特点:
-
BMS板子是"老大",它提供一切
-
浏览器是"小弟",只是显示工具
-
界面代码存储在板子里,不是电脑上
互联网的真相
┌───┐ 请求网页 ┌───┐ 请求网页 ┌───┐
│你的│ ───────→ │百度│ ───────→ │某个│
│电脑│ ←────── │服务器│ ←────── │数据库│
└───┘ 返回网页 └───┘ 返回数据 └───┘
区别只是"板子"的大小和复杂程度:
你的BMS板子
-
服务1个人
-
存储几KB网页
-
处理简单请求
百度服务器
-
服务几亿人
-
存储PB级数据
-
处理复杂搜索
浏览器到底是什么?
浏览器就像电视机:
-
本身不制作节目
-
只能接收和显示信号
-
换台就是换不同的"板子"
电视机(浏览器)←─── 信号(HTTP响应)
↓
显示画面(网页界面)
完整的互联网流程
1. 输入 www.baidu.com
↓
2. 找到百度的"板子"(服务器)
↓
3. 百度板子说:"这是搜索界面"
↓
4. 你输入"天气"
↓
5. 百度板子说:"这是搜索结果"
完整流程拆解
第一步:板子发送什么数据?
板子发送的是纯文本! 就是一串字符串:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>
<head><title>BMS监控</title></head>
<body>
<h1>电池状态</h1>
<p>电压:14.8V</p>
<p>电流:2.1A</p>
<button onclick="updateData()">刷新</button>
</body>
</html>
这就是全部! 没有魔法,就是文本!
第二步:文本如何变成网页?
板子发送的文本
↓
浏览器接收(还是文本)
↓
浏览器解析HTML标签
↓
浏览器绘制界面
↓
你看到网页
就像你用记事本写小说,Word能把它排版成漂亮的文档一样!
板子存储:
├─ HTML网页(界面样子)
├─ JavaScript(交互逻辑)
└─ 数据接口(/api/data)
工作流程:
先给浏览器完整的"操作面板"(HTML)
浏览器显示面板,用户点击按钮
按钮触发JavaScript,偷偷请求数据
板子读取传感器,返回最新数据
JavaScript更新显示内容
1. HTTP是什么?
HTTP就像"快递包裹的外包装"
完整的HTTP响应(板子发送的纯文本):
┌─────────────────────────────────────┐
│ HTTP/1.1 200 OK │ ← 快递单(状态)
│ Content-Type: text/html │ ← 包裹类型说明
│ Content-Length: 1234 │ ← 包裹大小
│ │ ← 空行
│ <html>...实际内容...</html> │ ← 真正的包裹内容
└─────────────────────────────────────┘
HTTP的工作:告诉浏览器"包裹状态"和"里面是什么"
2. HTML是什么?
HTML就像"包裹里的说明书"
HTTP包裹里的HTML内容:
<html> ← 说明书开始
<body> ← 正文开始
<h1>电压监控</h1> ← 大标题
<p>14.8V</p> ← 段落内容
<button>刷新</button> ← 按钮
</body> ← 正文结束
</html> ← 说明书结束
HTML的工作:告诉浏览器"界面长什么样"
3. JSON是什么?
JSON就像"包裹里的数据卡片"
HTTP包裹里的JSON内容:
{
"voltage": 14.8,
"current": 2.1,
"temperature": 25.3
}
JSON的工作:提供"纯数据",没有界面
实际例子对比
情况1:请求完整网页
浏览器:GET /
板子返回的HTTP包裹:
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>
<h1>电压:14.8V</h1>
</body>
</html>
情况2:请求数据
浏览器:GET /api/data
板子返回的HTTP包裹:
HTTP/1.1 200 OK
Content-Type: application/json
{"voltage": 14.8, "current": 2.1}
它们的关系就像
快递包裹(HTTP响应)
├─ 快递单(HTTP头部)- 告诉浏览器怎么解析
└─ 包裹内容
├─ 情况1:说明书(HTML)- 有界面
└─ 情况2:数据卡片(JSON)- 纯数据
为什么要分这么清楚?
用HTML的情况
-
第一次访问 - 需要完整界面
-
整页刷新 - 需要新界面
用JSON的情况
-
局部更新 - 只需要数据
-
AJAX请求 - 页面不刷新,只改数字
板子的完整代码示例
void handle_request(char* request) {
if (strstr(request, "GET / ")) {
// 返回完整网页(HTML)
sprintf(response,
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"<html><body>"
"<h1>电压:%.1fV</h1>"
"</body></html>",
voltage);
}
else if (strstr(request, "GET /api/data")) {
// 返回纯数据(JSON)
sprintf(response,
"HTTP/1.1 200 OK\r\n"
"Content-Type: application/json\r\n"
"\r\n"
"{\"voltage\":%.1f,\"current\":%.1f}",
voltage, current);
}
}
总结记忆法
HTTP = 快递包装盒(怎么传)
HTML = 带界面的说明书(长什么样)
JSON = 纯数据卡片(只有数字)
一个负责传输,一个负责界面,一个负责数据!