基于CGI的嵌入式W eb服务器的设计与实现
2016-11-09雷娟娟陈福才
朱 锦,雷娟娟,陈福才
(国家数字交换系统工程技术研究中心 河南 郑州450000)
基于CGI的嵌入式W eb服务器的设计与实现
朱 锦,雷娟娟,陈福才
(国家数字交换系统工程技术研究中心 河南 郑州450000)
为了在资源有限的嵌入式设备上能够有效地实现动态Web,本文比较了几种Web服务器的优缺点,选择了性能优异的Boa作为嵌入式Web服务器,阐述了CGI技术的相关原理以及SQLite数据库的定义。本文所设计的查询数据系统以嵌入式Linux操作系统为软件平台,以PowerPC8548为硬件平台,利用HTML表单和CGI技术完成了对后端数据库SQLite的数据信息查询,实现Web客户端与Web服务器的动态交互。
嵌入式Web服务器;Boa;CGI;SQLite
随着计算机网络技术的发展和嵌入式Web应用越来越广泛,需要接入Internet网的信息化产品越来越多。在嵌入式系统中可以通过Web页面进行远程访问和控制,查看或修改远程设备的数据信息。为了满足嵌入式设备接入互联网的需求以及实现嵌入式Web服务器与Web页面的动态交互[1],很多系统引入了CGI技术[2]。
CGI是实现动态Web的基础。文中对嵌入式Web服务器Boa以及CGI技术的相关原理进行了研究,利用CGI技术实现Boa服务器和Web页面的动态交互,实验结果成功证明了其可行性。
1 嵌入式W eb服务器
嵌入式Web服务器(Embedded Web Server,EWS)指的是在现场测试和控制设备中嵌入的Web服务器。EWS是以TCP/IP协议栈为基础进行设计的,在此基础上要构建HTTP、TCP以及UDP等协议。由于嵌入式设备的处理器能力有限,存储容量也小得多,传统的Web服务器很难运行在嵌入式设备上,必须考虑使用体积更小、功能相对简单、消耗资源更少的简单Web服务器来解决这一问题,嵌入式Web服务器便应运而生。
衡量嵌入式Web服务器的性能取决于以下几个方面[3]:1)可移植性,即能方便地在多种目标平台上进行移植;2)可裁减性,使用户可以根据实际需求,裁减掉那些冗余的功能,降低嵌入式Web服务器对资源的需求;3)可交互性,即服务器与目标系统间的交互性越好,说明它的使用越方便,对目标系统的控制越灵活。
常见的嵌入式Web服务器有httpd、apache、goAhead和Boa等。httpd是最简单的一种Web服务器,它的功能最弱,不支持认证,不支持CGI,仅能提供一些静态页面;apache是重量级服务器,成熟稳定,但体积较大,适合复杂的嵌入式应用,在高负载的情况下,没有单进程的服务器性能高;goAhead和Boa都支持CGI,但是goAhead是个比较专用的Web服务器,大部分功能都在服务它自己提供的goform功能和ASP功能,而Boa是一个非常小巧且高效的嵌入式服务器,开放源代码,可执行代码大约只有60 kB,它运行在Linux或Unix下,支持CGI和HTTP,响应请求的速度快,最多可以同时响应50个请求。Boa的设计目标是速度和安全,非常适合于嵌入式系统。为了实现动态Web技术,本文也正是采用了Boa。
2 CGI原理
2.1CGI工作原理
用户通过Web浏览器进行URL访问,形成的HTTP请求通过浏览器发送到Web服务器,Web服务器守护进程接收到该请求后会创建一个CGI的子进程,该子进程将CGI请求的有关数据设置成环境变量,然后根据链接启动指定的CGI处理程序从环境变量中读取数据,经过处理后,最后使用STDOUT输出HTML形式的结果文件,经Web服务器送回浏览器显示给用户。
2.2CGI的传送数据方式
CGI传送方式[4]是使用HTML表单向Web服务器发送信息。基本语法如下:
其中method属性定义了程序如何将数据传送到Web服务器,传送方式有两种:
1)GET方法
使用GET方法时,表单数据会附加在所指向CGI脚本的URL后一起发送给Web服务器,Web服务器将收到的表单数据赋予环境变量QUERY-STRING,CGI程序将以字符串的形式从环境变量QUERY_STRING中获取数据。
2)POST方法
POST方法通过使用标准输入(STDIN)将表单数据传送给Web服务器。将数据的长度存放在环境变量CONTENT_ LENGTH中,CGI程序先从CONTENT_LENGTH中读出数据的长度,然后再从标准输入STDIN中获取数据。
2.3CGI环境变量
CGI环境变量[5]是CGI的重要内容,所有的信息都是通过环境变量和CGI联系,服务器与CGI程序交换信息的工作方式也是通过环境变量来实现的。当通过浏览器访问Web服务器时,利用环境变量来保存所发出的请求,CGI程序再访问这些环境变量,换句话说,环境变量是Web服务器和CGI脚本进行数据传递的桥梁。
2.4CGI的调用方法
在Web网页中调用CGI程序有两种方法[5]:表单(FORM)和超链接(URL)。
1)表单(FORM)调用方法
当Web页面以表单的方式向Web服务器提交数据时,把CGI程序存放的相对路径放在