嵌入式单板--BOA服务器报错:502 Bad Gateway The CGI was not CGI/1.1 compliant. 原因分析

一、BOA简介
1、BOA是一个非常小巧的Linux Web服务器,可执行代码只约60kB。
2、BOA是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但BOA能够为请求对应的CGI程序fork出一个新的子进程。 
3、BOA 的设计目标是速度和安全,在其站点公布的性能测试中,BOA的某些性能还要好于Apache服务器。

二、CGI简介
CGI--公共网关接口(Common Gateway Interface) 是WWW技术中最重要的技术之一。CGI是外部应用程序(CGI程序或 CGI 脚本)与Web服务器之间的接口标准。CGI规范允许Web服务器执行外部程序,并将结果返回给Web浏览器。绝大多数的CGI程序被用于解释处理来自HTML表单的输入信息,并在服务器产生相应的处理或将相应的结果返回给浏览器。CGI程序使网页具有了交互功能。

三、问题分析

1、问题:

在Web浏览器返回结果:502 Bad Gateway The CGI was not CGI/1.1 compliant。在目标板的调试终端中输出下述错误:……cgi_header:unable to find LFIF

2、前提条件:BOA的配置是OK的

BOA的配置文件是boa.conf,注意要根据目标板的实际目录来配制,以下我在配置时修改的地方:

(1)Port 80

(2)DocumentRoot /root/web

(3)MimeTypes /root/web/mime.types

(4)ScriptAlias /cgi-bin/ /root/web/cgi-bin/

(5)SinglePostLimit 30720000    ---太小会导致上传下载文件大小受限

3、分析:Http请求---->BOA---->CGI程序---->Http响应,根据这个请求流程来分析(BOA一般不会有问题,主要是CGI程序)

(1)CGI程序交叉编译时:BOA和CGI一般用于嵌入式ARM单板,所以要保证CGI程序是经过交叉编译过的,才能在ARM单板运行;如果CGI程序无法运行会报这个错误。

(2)CGI程序的执行权限:在Linux中要运行一个执行程序,需要给权限的;如chmod -R 777 xxxx.cgi;如果忘记加执行权限会导致程序无法被Linux启动,也会报这个错误。

(3)CGI程序接收Http请求时:Http请求一般用GET方法把参数送给CGI程序,需要注意GET参数是否过长、是否有特殊字符,这些会导致CGI程序解析参数时没有足够的字符串空间或解析出错,也会报这个错误。

(4)CGI程序内部处理异常:CGI程序是以BOA的一个子进程在运行,如果内部处理发生异常崩溃退出,没有CGI程序把结果返回给Web浏览器,也会报这个错误。

(5)CGI程序返回结果时:CGI程序是通过标准输出将字符串″Contenttype:text/plain\n\n″传送给Web服务器的,这是一个MIME头信息,告诉Web服务器随后的输出是以纯ASCII文本的形式。【注意在这个头信息中有两个换行符】,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。如果CGI程序返回结果不按照这种方式输出一个空行,也会报这个错误。

4、从开始的Http请求到最后的Http响应,是沿着请求流程进行分析,原则还是:BOA一般不会有内部问题,主要是自己开发的CGI程序有逻辑问题、指针内存问题、没有注意一些细节;通过排除法缩小问题范围,在小范围内走读代码日志跟踪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值