Skip to content

先搞懂它是什么

  • 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 看实现

  • 相关例程页:HTTP 简介、GETPOST、HTTPS、RESTful API 服务端

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

Released under the MIT License. Build Time 2026-09-11 14:52:23