OTA的HTTP笔记

一、HTTP/1.1 核心概念

HTTP(HyperText Transfer Protocol,超文本传输协议)是客户端与服务器之间的应用层协议,基于 TCP 面向连接、可靠传输的特性,核心是 “请求 - 响应” 模型。HTTP/1.1 是目前应用最广泛的版本(替代 HTTP/1.0,兼容大部分场景),其设计目标是高效传输资源(文件、网页、接口数据等),适配多数场景(含嵌入式 OTA 开发)。

核心概念定义 / 特点实战关联(如 OTA 开发)
无状态协议服务器不保存客户端历史状态,每次请求独立用 ETag/Last-Modified 校验文件版本
面向连接基于 TCP 三次握手建立连接,四次挥手关闭保证 OTA 固件传输不丢包、按序到达
长连接(Keep-Alive)复用 TCP 连接传输多个请求(HTTP/1.1 默认)提升 OTA 分片下载效率,避免重复建立连接
请求方法定义请求的操作类型(核心:GET/POST/HEAD)GET 用于 OTA 固件下载,HEAD 用于校验资源存在性
状态码应答的结果标识(分 5 类)206 对应分片下载成功,404 对应固件不存在
头字段键值对(键: 值),传递元数据(资源大小、类型等)Content-Range 用于 OTA 分片规划,Content-Length 校验完整性
URI资源唯一标识,指定服务器上目标资源路径指向 OTA 固件在服务器的存储路径
响应体实际传输的资源数据(如二进制固件、文本等)OTA 中为固件二进制数据,需按字节保存

二、HTTP/1.1 请求语法

1. 请求固定结构

请求行 → 请求头 → 空行

2. 请求示例(GET 分片请求,获取资源第 0-1023 字节)

GET /firmware/device_v1.2.bin HTTP/1.1\r\n
Host: [服务器域名/IP]\r\n
Connection: Keep-Alive\r\n
Range: bytes=0-1023\r\n
User-Agent: Embedded-Client/1.0\r\n
Accept: */*\r\n
\r\n

3. 语法拆解(表格详解)

组成部分示例内容格式要求含义说明
请求行(必选)GET /firmware/device_v1.2.bin HTTP/1.1\r\n[请求方法] [URI] [协议版本]\r\n,三要素用空格分隔,结尾必须是 \r\n- GET:请求方法(获取资源,安全可重试)- URI:目标固件路径- HTTP/1.1:协议版本
请求头(可选)Host: [服务器域名/IP]\r\n键: 值\r\n,键名大小写不敏感,值前后可加空格HTTP/1.1 强制要求,指定目标服务器(一台服务器可托管多个资源)
Connection: Keep-Alive\r\n同上启用长连接,复用 TCP 连接传输后续分片请求
Range: bytes=0-1023\r\n同上分片下载核心,指定请求资源的字节范围(0 起始计数)
User-Agent: Embedded-Client/1.0\r\n同上标识客户端类型(嵌入式设备),服务器可适配响应
Accept: */*\r\n同上客户端可接收任意资源类型,适配二进制固件
空行(必选)\r\n单独的 \r\n,无其他字符分隔请求头与请求体(GET 请求无请求体,仅作为结束标识)
3.1. 常用 HTTP 请求方法

请求方法决定了 “客户端想对服务器做什么”:

方法作用例子
GET从服务器获取资源(不修改服务器数据)下载 OTA 包(你的请求)、打开网页
POST向服务器提交数据(可能修改服务器数据)登录账号、上传文件
HEADGET一样,但服务器只返回响应头,不返回响应体(比如只校验文件大小,不下载内容)嵌入式中常用於 OTA 前置检查
PUT向服务器上传资源(覆盖原有资源)较少用
3.2. 关键 HTTP 请求头

请求头是 “客户端告诉服务器的额外信息”,键值对格式(键: 值),你的请求用到了 2 个核心头:

头字段作用你的用法
Host指定目标服务器域名(HTTP 1.1 强制要求)Host: www.youkuaiyun.com(告诉服务器访问这个域名)
Range请求资源的部分字节(分片下载 / 断点续传)Range: bytes=0-0(仅要第 0 字节)
User-Agent告诉服务器客户端的身份(比如设备型号、浏览器)嵌入式中可能写User-Agent: HLW8012-OTA-Client
Content-Length告诉服务器请求体的大小(POST 请求用)比如上传文件时写Content-Length: 1024

4. 语法强制规则(避坑)

  • 所有字段结尾必须是 \r\n(HTTP 标准换行符,不可用 \n 替代);
  • 请求行三要素不可缺失,空格分隔不可少;
  • Host 头不可省略(HTTP/1.1 强制要求,缺失返回 400 错误)。

三、HTTP/1.1 应答语法(对应上述请求)

1. 应答固定结构

状态行 → 响应头 → 空行 → 响应体

2. 应答示例(206 分片响应)

HTTP/1.1 206 Partial Content\r\n
Date: Thu, 20 Nov 2025 10:00:00 GMT\r\n
Server: [服务器软件]\r\n
Last-Modified: Wed, 08 Oct 2025 15:30:00 GMT\r\n
ETag: "a1b2c3d4-5678"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 1024\r\n
Content-Range: bytes 0-1023/32768\r\n
Content-Type: application/octet-stream\r\n
Connection: Keep-Alive\r\n
\r\n
[二进制数据:资源第 0-1023 字节]

3. 语法拆解(表格详解)

组成部分示例内容格式要求含义说明
状态行(必选)HTTP/1.1 206 Partial Content\r\n[协议版本] [状态码] [状态短语]\r\n- HTTP/1.1:与请求版本一致 - 206:状态码(部分资源请求成功)- Partial Content:状态短语(文字描述)
响应头(核心)Date: Thu, 20 Nov 2025 10:00:00 GMT\r\n键: 值\r\n,顺序可任意服务器处理请求的时间(GMT 标准时间),用于日志记录
Last-Modified: Wed, 08 Oct 2025 15:30:00 GMT\r\n同上资源最后修改时间,用于 OTA 版本校验(判断是否有新版本)
ETag: "a1b2c3d4-5678"\r\n同上资源唯一指纹(内容变则 ETag 变),用于断点续传版本校验
Accept-Ranges: bytes\r\n同上服务器支持按字节分片(值为 bytes),不支持则返回 none
Content-Length: 1024\r\n同上响应体字节数(本次分片大小),用于校验接收完整性
Content-Range: bytes 0-1023/32768\r\n同上分片核心:bytes [当前范围]/[总大小],提取总大小规划后续分片
Content-Type: application/octet-stream\r\n同上响应体 MIME 类型,application/octet-stream 表示二进制文件(OTA 需按二进制保存)
Connection: Keep-Alive\r\n同上确认长连接,允许复用 TCP 连接
空行(必选)\r\n单独的 \r\n分隔响应头与响应体,标识响应头结束
响应体(可选)[二进制数据:第 0-1023 字节]格式由 Content-Type 决定(此处为二进制流)实际请求的资源数据,OTA 需写入本地文件对应偏移位置

四、核心状态码分类

状态码范围类别核心含义常用状态码及说明
1xx信息提示服务器接收请求,需进一步处理- 100 Continue:客户端可继续发送请求
2xx成功请求正常处理完毕- 200 OK:完整资源请求成功- 206 Partial Content:分片请求成功
3xx重定向需客户端进一步操作才能获取资源- 301 Moved Permanently:资源永久迁移- 304 Not Modified:资源未修改(可使用缓存)
4xx客户端错误请求格式 / 参数错误,服务器无法处理- 400 Bad Request:请求格式错误- 404 Not Found:资源不存在- 416 Requested Range Not Satisfiable:分片范围无效
5xx服务器错误服务器处理请求时发生故障- 500 Internal Server Error:服务器内部故障- 503 Service Unavailable:服务器暂时不可用

五、OTA 开发核心关联字段

字段类型字段名作用开发操作要点
请求头Range指定分片字节范围格式:bytes=start-end,如 bytes=1024-2047
Connection启用长连接显式声明 Keep-Alive,提升下载效率
响应头Content-Range获取分片范围 + 文件总大小提取总大小(如 32768),计算分片数量
Content-Length校验分片接收完整性接收字节数需等于该值,否则重传
Accept-Ranges判断是否支持分片仅当值为 bytes 时,可使用 Range 分片
Last-Modified校验资源版本对比本地文件修改时间,判断是否需要更新
ETag断点续传版本校验确保分片属于同一版本资源,避免篡改
Content-Type确定数据存储格式二进制类型(application/octet-stream)需按字节保存

六、常见错误排查

错误现象可能原因排查步骤
400 Bad Request请求行格式错误、Host 头缺失、头字段格式错误1. 检查请求行三要素空格是否完整2. 确认 Host 头存在3. 核对所有头字段是否符合 键: 值 格式
404 Not FoundURI 路径错误、资源不存在1. 核对 URI 路径与服务器存储路径一致2. 确认服务器上资源已上传
416 错误分片范围超出总大小、Range 格式错误1. 检查 Range 格式是否正确2. 基于 Content-Range 重新计算分片范围
提取文件总大小失败未解析 Content-Range 字段、响应头不完整1. 确保接收完整响应头2. 按 bytes 0-xxx/总大小 格式提取
固件保存后无法运行按文本格式存储、分片顺序错误1. 按二进制模式写入文件2. 按分片范围顺序写入对应偏移位置

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值