当前位置: 首页 > article >正文

LINUX设备OTA时无法从HTTP服务器(TOMCAT)下载文件

疑难问题排查记录

问题

linux设备作为http客户端,执行OTA前先从HTTP服务器下载bin固件,测试nginx没有问题,nodejs编写的HTTP服务器也没有问题,而软件同事使用的Tomcat则无法成功下载。

排查经过

首先利用chrome浏览器测试下载链接URL,nginxtomcatnodejs编写的HTTP服务器都可以成功下载,我自己linux程序只能在nginxnodejs服务器下载。

使用chrome 调试工具查看responsenginxtomcat返回大看无区别,都返回了200状态码
请添加图片描述
请添加图片描述

单步调试调试发现,程序在解析HTTP response的返回有区别,我的linux程序使用了http_parse.c文件,这个库在解析没有状态信息HTTP response 时无法成功执行状态码设置回调函数,导致HTTP请求执行成功后,对状态码的判断不是200,认为请求失败。利用wireshark进一步确定了问题
请添加图片描述
请添加图片描述

问题成功定位

请添加图片描述

解决方式

当前由于射别已安排批量生产出货,无法修改设备程序,只好让软件同事不要使用tomcat作为OTA使用的静态文件的HTTP服务器,后续修改htpp_parse.c库文件实现。

另附上http response的标准

标准的HTTP response

如下

请添加图片描述

示例

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
   <head></head>
   <body>
   </body>
</html>

第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。

状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息–表示请求已接收,继续处理
    2xx:成功–表示请求已被成功接收、理解、接受
    3xx:重定向–要完成请求必须进行更进一步的操作
    4xx:客户端错误–请求有语法错误或请求无法实现
    5xx:服务器端错误–服务器未能实现合法的请求

常见状态码:

200 OK   //客户端请求成功
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden      //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

更多状态码http://www.runoob.com/http/http-status-codes.html


http://www.kler.cn/news/362582.html

相关文章:

  • 顺序表(一)(数据结构)
  • Spring + WebSocket
  • 《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)
  • 2024软件测试面试秘籍(含答案+文档)
  • 如何实现金蝶商品数据集成到电商系统的SKU
  • 简单汇编教程10 数组
  • GRU神经网络理解
  • LabVIEW提高开发效率技巧----插入式架构
  • 力扣 简单 70.爬楼梯
  • 1024是什么日子
  • 数据结构《顺序表》
  • 通过微信小程序实现对接企业微信客服
  • 【Java Script引擎有哪些】
  • JavaWeb合集11-Maven高级
  • MySQL 的意向锁(Intention Locks)原理详解
  • Flink 状态精准一次性特性
  • 线性可分支持向量机的原理推导【补充知识部分】9-10最大化函数max α,β L(x,α,β)关于x的函数 公式解析
  • C++——NetWork
  • Mac 使用 zsh 终端提示 zsh: killed 的问题
  • 微信小程序设置弹框底下内容不能移动 滚动(滚动穿透问题)
  • 【鼠鼠学AI代码合集#8】线性神经网络
  • Vue封装组件并发布到npm仓库
  • 【ROS2】Qt和ROS混合编程:多继承QObject和rclcpp::Node
  • LRU算法
  • ATmega128定时器里面的定时器和外部中断配置
  • ElasticSearch基本概念