先搞懂它是什么
- HTTP(超文本传输协议):Web 世界的“点菜流程”——客户端发请求(我要什么),服务器回响应(给你什么)。
- 请求/响应模型:HTTP 是“一问一答”,服务器不会主动推数据。
- 基于 TCP:HTTP 跑在 TCP 之上(80 端口),HTTPS 是加了一层 TLS 加密(443 端口)。
层层拆解原理
1. 一次 HTTP 请求的完整流程
2. 请求报文结构
text
GET /data HTTP/1.1 ← 请求行:方法 路径 版本
Host: example.com ← 请求头:键值对
Content-Type: application/json
← 空行分隔头部与正文
{"temp": 25} ← 请求体(POST 常见)常用方法:
| 方法 | 语义 | 典型用途 |
|---|---|---|
| GET | 获取资源 | 读传感器数据、网页 |
| POST | 提交/创建 | 上报数据、登录 |
| PUT | 整体更新 | 更新配置 |
| DELETE | 删除 | 删除资源 |
3. 状态码:服务器怎么回答
| 状态码 | 含义 | 常见场景 |
|---|---|---|
| 2xx | 成功 | 200 OK |
| 3xx | 重定向 | 301/302 跳转 |
| 4xx | 客户端错误 | 404 不存在、401 未认证 |
| 5xx | 服务器错误 | 500 服务器内部错误 |
4. HTTPS:给 HTTP 加“密封信封”
HTTPS = HTTP + TLS:先握手协商密钥、验证证书,再加密传输。SDK 的 HTTPS 例程会涉及证书配置,服务器校验失败就连接不上。
结合 SDK 看实现
SDK 用 HTTP 客户端做 GET 的核心流程:先连 Wi-Fi 拿 IP,再 socket 连服务器 80 端口,发送请求文本,读取响应:
c
/* 伪代码:GET 请求 = 建立 TCP 连接 + 发送请求行/头 + 读取响应 */
char req[] = "GET /api/data HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n";
send(sock, req, strlen(req), 0);
while ((len = recv(sock, buf, sizeof(buf), 0)) > 0) { /* 处理响应体 */ }POST 的区别在于增加 Content-Type 与正文;RESTful API 服务端例程则是在开发板上实现“服务器”角色,接收并解析请求。
常见考点 / 面试题
HTTP 和 HTTPS 的区别?
HTTPS 在 HTTP 与 TCP 之间加 TLS 加密层,能防窃听、防篡改、验证服务器身份;代价是握手开销更大。
GET 和 POST 有什么本质区别?
GET 请求资源、参数一般放 URL;POST 提交数据、参数放请求体。语义上 GET 是“读”,POST 是“写”。
404 和 500 分别代表什么?
404 是客户端要的资源不存在;500 是服务器内部出错。排查方向:前者查路径,后者查服务器程序。
请求报文里空行有什么用?
空行分隔“头部”和“正文”,服务器据此知道头部结束;没有空行就无法区分。
开发板为什么也要会 HTTP?
与云平台/Web 服务对接、上报数据、获取配置、OTA 下载固件都走 HTTP/S,是物联网设备与互联网交互的基础协议。
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

