HTTPD AT 命令集
备注
HTTPD AT 命令默认未启用,且仅在**主控控制模式**下可用。
在 menuconfig 的
CONFIG SHELL→Enable ATCMD→Host Control Mode中启用Enable HTTPD (transparent HTTP server to host)。工程还需包含网络/LWIP 组件。设备作为 HTTP/HTTPS server,将收到的请求上报给 host MCU,由 host 处理后使用
AT+HTTPDRSP或AT+HTTPDRSPRAW回复。启动 server 前,设备应已连接网络并获得 IP,且 client 能访问该 IP。使用 HTTPS 时,须预先将服务器证书套件放入 VFS 的
/CERT/目录,详情请参考 AT 安全证书。
AT+HTTPDCFG
功能说明
配置最大并发连接数、server 线程栈大小,以及等待 host 开始回复的超时时间。应在启动 server 前设置;配置会持续生效,直至再次修改或设备重启。
命令格式
AT+HTTPDCFG=<max_conn>[,<stack>][,<timeout_ms>]
响应格式
成功响应:
OK
错误响应:
ERROR: <error_no>
参数
- <max_conn>:
最大并发连接数及待处理请求数。
范围:[1,4]
默认值:2
请求 ID 范围为 0 至
max_conn - 1。
- <stack>:
HTTP 请求处理线程的栈大小,单位为字节。
最小值:2048 字节
默认值:4096 字节
若请求处理需要更多栈空间可适当增大;较大的值会占用更多 RAM。
- <timeout_ms>:
等待 host 开始回复的时间,单位为毫秒。
范围:[1,120000]
默认值:10000
超时仅适用于 host 开始执行
AT+HTTPDRSP或AT+HTTPDRSPRAW之前。RAW 传输开始后,传输时间不受此超时限制。
错误代码
1:参数缺失或无效
2:HTTPD server 正在运行;修改配置前须先停止 server
示例
将最大并发数设为 3,栈大小和超时沿用默认值:
AT+HTTPDCFG=3
OK
设置全部配置项:
AT+HTTPDCFG=2,4096,30000
OK
AT+HTTPDSTART
功能说明
在指定 TCP 端口启动 HTTP 或 HTTPS server。server 会将 GET、POST 和 PUT 请求转发给 host MCU;host 需要对每个请求进行回复。
命令格式
AT+HTTPDSTART=<port>,<conn_type>[,<cert_index>]
响应格式
成功响应:
[HTTPD][EVENT]:start
OK
错误响应:
ERROR: <error_no>
参数
- <port>:
server 监听的 TCP 端口。
范围:[1,65535]
常用端口:HTTP 使用 80,HTTPS 使用 443。
- <conn_type>:
传输类型及客户端证书校验策略。
1:普通 TCP/HTTP。
2:TLS/HTTPS;不校验客户端证书。
3:TLS/HTTPS;要求并校验客户端证书(双向 TLS 认证)。
- <cert_index>:
服务器证书套件索引。
conn_type为 2 或 3 时必填,范围为 [1,10]。证书套件包含/CERT/下的server_cert_<index>.crt、server_key_<index>.key和server_ca_<index>.crt。两种 TLS 模式都会加载这三个文件;conn_type=3时还会使用服务器 CA 校验客户端证书。
错误代码
1:参数无效,或 HTTPS 模式未提供有效的
cert_index2:server 已在运行
3:内存分配失败或证书文件读取失败
4:HTTPD server 启动失败
5:TLS 证书配置或解析失败
示例
在 80 端口启动 HTTP server:
AT+HTTPDSTART=80,1
[HTTPD][EVENT]:start
OK
使用第 1 套服务器证书启动 HTTPS,不校验客户端证书:
AT+HTTPDSTART=443,2,1
启动 HTTPS 并要求客户端提供证书:
AT+HTTPDSTART=443,3,1
AT+HTTPDSTOP
功能说明
停止 HTTPD server。正在等待 host 回复的请求会被唤醒并关闭连接;停止操作中断的请求可能会收到 HTTP 500 响应。
命令格式
AT+HTTPDSTOP
响应格式
server 正在运行时:
[HTTPD][EVENT]:stop
OK
server 未运行时,命令直接返回 OK。
AT+HTTPDQUERY
功能说明
查询 server 状态、当前配置和占用中的请求槽。
命令格式
AT+HTTPDQUERY
响应格式
running: <0|1>
max_conn: <n>
stack: <bytes>
timeout_ms: <ms>
req_id <i>: state <s> # 仅非空闲请求槽显示此行
OK
请求状态值:1 表示等待 host 回复,2 表示正在通过 RAW 传输响应 body,3 表示内联响应已就绪,4 表示 RAW 响应已发送、连接即将关闭。状态 4 可能只会短暂出现。
AT+HTTPDRSP
功能说明
通过 AT 命令携带响应 body,回复 HTTP 请求。适合空 body 或较短的文本 body。req_id 来自请求上报信息。
命令格式
AT+HTTPDRSP=<req_id>,<status>,<content_type>,<body_len>[,<body>]
响应格式
成功响应:
OK
错误响应:
ERROR: <error_no>
参数
- <req_id>:
[HTTPD][REQ]上报中的请求 ID;范围为 [0,max_conn - 1]。- <status>:
HTTP 状态码;范围为 [100,599]。
- <content_type>:
HTTP
Content-Type响应头的值;最多 63 字节,且不能包含逗号。为空时默认为text/plain。- <body_len>:
body的字节数。空 body 使用 0。UTF-8 文本应填写编码后的字节数,而不是字符数。- <body>:
可选的内联响应 body。
body_len大于 0 时必填。body 至少包含body_len字节,且不能包含逗号或 CR/LF;如果内容包含这些字符、是二进制数据或 body 较大,请使用AT+HTTPDRSPRAW。
错误代码
1:参数无效,或内联 body 长度小于
body_len2:请求 ID 无效,或请求已超时/停止
3:内存分配失败
示例
回复请求 ID 0,body 为 ok:
AT+HTTPDRSP=0,200,text/plain,2,ok
OK
返回空 body 的 404 响应:
AT+HTTPDRSP=0,404,text/plain,0
OK
AT+HTTPDRSPRAW
功能说明
通过透传(TT)模式发送 HTTP 响应 body。设备使用固定大小的中转缓冲区,将指定字节数的数据流式转发给 HTTP client,不需要在 RAM 中缓存完整 body。适用于大 body、二进制内容或包含逗号、换行符等分隔字符的内容。
命令格式
AT+HTTPDRSPRAW=<req_id>,<status>,<content_type>,<body_len>
命令执行后设备返回 >>>。host 随后必须通过 AT 数据通道发送恰好 body_len 字节的原始数据;传输完成后设备返回 OK。
参数
- <req_id>:
[HTTPD][REQ]上报中的请求 ID。- <status>:
HTTP 状态码;范围为 [100,599]。
- <content_type>:
HTTP
Content-Type响应头的值;最多 63 字节且不能包含逗号。为空时默认为application/octet-stream。- <body_len>:
要发送的原始响应 body 字节数,必须大于 0。空 body 请使用
AT+HTTPDRSP。
错误代码
1:参数无效或 body 长度为 0
2:请求 ID 无效、请求已过期,或响应期间客户端连接失败
3:内存分配失败
4:TT 传输失败
示例
发送 27 字节 JSON body:
AT+HTTPDRSPRAW=0,200,application/json,27
>>>
{"status":"ok","code":200}
OK
设备主动上报
每收到一个受支持的 HTTP 请求,设备都会向 host 上报请求元信息:
[$][HTTPD][REQ][<req_id>][<method>][<path_len>][<query_len>][<content_len>]:<path>[?<query>]
<method> 为 GET、POST、PUT 或 OTHER;HTTPD AT handler 注册了 GET、POST 和 PUT 方法。各长度字段的单位均为字节。query_len 不包含开头的 ?。如果请求包含 body,设备会分一条或多条上报:
[$][HTTPD][BODY][<req_id>][<len>]:<body bytes>
host 应根据 req_id 将请求元信息与 body 上报对应起来。多个请求可以同时等待处理;回复时须使用对应请求的 ID。
server 状态及请求超时上报:
[HTTPD][EVENT]:start
[HTTPD][EVENT]:stop
[$][HTTPD][TIMEOUT][<req_id>]
如果 host 未能在 timeout_ms 到期前开始回复,设备会上报超时、向 client 返回 HTTP 500,并释放对应请求槽。
HTTP 请求/响应示例
以下示例中,client 请求 /hello,host 回复 ok:
AT+HTTPDSTART=80,1
[HTTPD][EVENT]:start
OK
# HTTP client: GET http://<device_ip>/hello
[$][HTTPD][REQ][0][GET][6][0][0]:/hello
AT+HTTPDRSP=0,200,text/plain,2,ok
OK
client 会收到 HTTP 200 响应,body 为 ok。不再需要 server 时将其停止:
AT+HTTPDSTOP
[HTTPD][EVENT]:stop
OK