疑难问题排查记录
问题
linux设备作为http
客户端,执行OTA
前先从HTTP
服务器下载bin
固件,测试nginx
没有问题,nodejs
编写的HTTP服务器也没有问题,而软件同事使用的Tomcat
则无法成功下载。
排查经过
首先利用chrome
浏览器测试下载链接URL,nginx
、tomcat
、nodejs
编写的HTTP服务器都可以成功下载,我自己linux
程序只能在nginx
和nodejs
服务器下载。
使用chrome
调试工具查看response
,nginx
和tomcat
返回大看无区别,都返回了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