固件请求UOTA下载地址之HTTP协议
一、概述 (固件UOTA HTTP协议)
本文档描述了基于HTTP协议的UOTA(Over-The-Air Update)固件更新接入方式。HTTP协议版本采用RESTful API设计,支持域名解析和负载均衡,适用于标准的设备端应用场景。
1.1 协议特点 (固件UOTA HTTP协议)
- 基于HTTP/HTTPS协议,兼容性好
- 使用RESTful API设计
- 支持AES加密保证数据安全
- 支持域名解析和负载均衡
- 支持断点续传和分片下载(RFC 7233)
- 请求和响应均采用text/plain格式
1.2 服务器地址信息 (固件UOTA HTTP协议)
- 测试环境:http://192.168.1.87:8419
- 线上环境:域名待定
1.3 域名解析策略 (固件UOTA HTTP协议)
域名解析支持两种模式:
- 权重模式:weight.akrdapp.cn
- 轮询模式:polling.akrdapp.cn(权重全部为1的特殊情况)
重要说明:
- 客户端需先通过域名获取IP列表,如果获取到一个IP则直接使用
- 如果获取到多个IP,需要判断是权重还是轮询模式后进行选择
- 禁止使用域名直接访问服务器接口,防止被追踪到域名和IP的关联关系

二、HTTP 协议规范 (固件UOTA HTTP协议)
2.1 请求规范 (固件UOTA HTTP协议)
- Content-Type: text/plain(所有POST请求)
- 响应格式: text/plain
- 请求方式: 仅支持IP地址请求,禁止域名请求
- 加密要求: 除时间戳请求外,所有请求都需要加密,否则返回404错误
2.2 固件配置参数 (固件UOTA HTTP协议)
每个固件需要内置以下两个参数(需要混淆避免反编译):
sdkVersion(SDK版本号)
- 用途: 版本标识,对应HTTP请求头中的sdk-version
- 建议: 每次发布固件都使用不同版本号
- 测试环境示例:
- allwinner-202510-01
- amlogic-202510-01
- rockchip-202510-01
secretKey(加密密钥)
- 用途: AES对称加解密密钥
- 长度要求: 16、24或32字节(对应AES-128、AES-192、AES-256)
- 建议: 每次发布固件都使用不同密钥
- 测试环境密钥:
12345678123456781234567812345678
2.3 测试环境特殊配置 (固件UOTA HTTP协议)
测试环境支持以下特殊请求头:
ignore-verification-time: true- 忽略时间戳校验encrypt: false- 返回明文响应(便于调试)
三、通信流程 (固件UOTA HTTP协议)
3.1 获取时间戳 (固件UOTA HTTP协议)
客户端首先需要获取服务器当前时间戳。
请求信息:
- 请求地址:
/app-api/get8852/yygtnow - 请求方式: GET
- 响应格式: text/plain
请求示例:
curl -X GET http://192.168.1.87:8419/app-api/get8852/yygtnow
响应示例:
1760951487809
3.2 构造UOTA请求数据 (固件UOTA HTTP协议)
客户端收到时间戳后,构造UOTA信息请求数据。
请求数据结构(加密前): 请求数据结构(加密前):
{
"mac": "A8:20:06:B7:C8:B9",
"cpu": "02c0008145f0462078a3840038350b53",
"time": 1760951487809,
"platform": "allwinner"
}
字段说明:
mac: 设备MAC地址cpu: 设备CPU标识,获取不到则传nulltime: 服务端返回的时间戳platform: 固件平台,支持amlogic、rockchip、allwinner
3.3 UOTA信息请求 (固件UOTA HTTP协议)
客户端将请求数据加密后发送给服务器。
请求信息:
- 请求地址:
/app-api/get8852/uncheck - 请求方式: POST
- Content-Type: text/plain
- 请求头:
sdk-version: SDK版本号(如:allwinner-202510-01)ignore-verification-time: true(仅测试环境)
- 请求体: 加密后的请求数据
响应数据结构(解密后):
{
"url": "http://192.168.1.87:8742/app-api/infra/file/download/redirect/1757560816080/app-netservice-3.4.9-allwinner-20250911-debug.apk",
"size": 4747480,
"packageName": "com.android.netservice",
"versionCode": 49,
"md5": "c7d614b68b94ef0ca470fb30fc3a79ec"
}
3.4 固件下载 (固件UOTA HTTP协议)
根据响应信息下载固件文件。
下载特性:
- 支持HTTP Range请求(RFC 7233规范)
- 支持断点续传和分片下载
- 文件完整性通过MD5校验
Range请求示例:
Range: bytes=0-499- 请求前500个字节(0到499)Range: bytes=500-999- 请求第500到第999个字节Range: bytes=500-- 请求从第500个字节到文件末尾Range: bytes=-500- 请求文件的最后500个字节Range: bytes=0-0- 请求第一个字节(探测文件信息)
服务器响应:
- 状态码: 206 Partial Content
- 响应头: Content-Range: bytes <range-start>-<range-end>/<total-size>
注意事项:
- 下载完整文件时:
Range: bytes=0-(size-1) - 如果下载字节数超过size,说明文件损坏,需要清理缓存重新下载
四、加密算法 (固件UOTA HTTP协议)
4.1 加密参数 (固件UOTA HTTP协议)
- 算法: AES-CBC
- 填充: PKCS5Padding
- 密钥长度: 16、24或32字节(对应AES-128、AES-192、AES-256)
- IV: 16字节随机生成
- 编码: Base64
4.2 密钥配置 (固件UOTA HTTP协议)
每个固件版本都应配置独立的密钥:
- 测试环境密钥:
12345678123456781234567812345678 - 生产环境: 根据sdkVersion从服务端配置获取