HTTP学习

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

  1. 你在浏览器输入http://192.168.1.100

  2. BMS板子收到:"有人要访问我"

  3. BMS板子响应:"这是我的网页内容"

  4. 你看到:电池电压、电流、温度等信息

网页内容从哪里来?

BMS板子的网页通常是:

  • 静态HTML文件:提前写好的网页,显示固定的界面

  • 动态数据:板子实时读取电池数据,插入到网页中

比如网页代码可能是:

复制代码
<html>
<body>
    <h1>BMS监控面板</h1>
    <p>电池电压:14.8V</p>
    <p>电流:2.1A</p>
</body>
</html>

简单总结

  • HTTP就是"请求-响应"的通信方式

  • 你的BMS板子是个小型Web服务器

  • 它提供网页界面,让你能查看电池状态

  • 就像用手机APP,只不过用的是浏览器

HTTP就是一问一答的通信模式:

第一次访问(获取完整网页)

复制代码
浏览器:我要看你的主页
BMS板子:好的,这是完整的网页代码

点击操作(新的请求)

复制代码
你点击"刷新数据"按钮
浏览器:请给我最新的电池数据
BMS板子:好的,这是更新后的数据

通信的本质

每次交互都是:

  1. 客户端发送请求(浏览器→BMS)

  2. 服务器处理请求(BMS读取传感器)

  3. 服务器返回响应(BMS发送数据)

  4. 客户端显示结果(浏览器更新界面)

就像微信聊天一样,每条消息都是一次独立的通信!

传统上位机 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)

工作流程:

  1. 先给浏览器完整的"操作面板"(HTML)

  2. 浏览器显示面板,用户点击按钮

  3. 按钮触发JavaScript,偷偷请求数据

  4. 板子读取传感器,返回最新数据

  5. 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 = 纯数据卡片(只有数字)

一个负责传输,一个负责界面,一个负责数据!

相关推荐
山土成旧客2 小时前
【Python学习打卡-Day31】项目架构师之路:告别杂乱脚本,拥抱工程化思维
开发语言·python·学习
xiaoxiaoxiaolll2 小时前
《Nature Communications》:面向工业尾气净化的智能MOF材料,光热再生突破能耗瓶颈
学习
大布布将军2 小时前
⚡部署的通行证:Docker 容器化基础
运维·前端·学习·程序人生·docker·容器·node.js
d111111111d2 小时前
STM32 I2C通信详解:从机地址与寄存器地址的作用
笔记·stm32·单片机·嵌入式硬件·学习
坚持就完事了2 小时前
CMD操作的学习
学习
炽烈小老头2 小时前
【每天学习一点算法 2025/12/30】最大子序和
学习·算法
搞机械的假程序猿2 小时前
普中51单片机学习笔记-LCD1602液晶显示
笔记·学习·51单片机
HyperAI超神经2 小时前
【vLLM 学习】Reproduciblity
人工智能·深度学习·学习·cpu·gpu·编程语言·vllm
好奇龙猫2 小时前
【大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(4)】
学习