嵌入式Linux系统CGI程序设计的技术

时间:2022-08-20 04:08:16

嵌入式Linux系统CGI程序设计的技术

随着互联网应用的普及,越来越多的化产品需要接入互联网通过web页面进行远程访问。嵌入式web系统提供了一种经济、实用的互联网嵌入式接入方案。这里结合一种嵌入式web server boa来介绍嵌入式linux系统下的cgi程序设计技术。

2 web server boa的实现与配置

2.1 uclinux下,主要有三个web server:/home/

它指定了html页面必须放到/home/了。并且,通过编写cgi外部扩展程序,可以实现动态web技术,下面将详细介绍。

2.2 具有mmu平台的linux下b0a的实现与配置

对于有mmu(内存管理单元)的平台,如armlinux和ppclinux,可以到网上下载一个主流版本的boa发行包。因为是运行在目标系统,所以要用交叉编译工具编译,即需要修改boa/src/makefile里面的编译器。例如:

cc=/linuxppc/cdk/bin/powerpc-linux-gcc

cpp=/linuxppc/cdk/bin/powerpc-linux-g++

然后直接在boa/src目录下执行make,即可生成boa可执行文件;将其编译入内核,并烧写到存储设备,就可以实现访问boa服务器。

3 cgi程序设计技术

cgi(common gateway interface)是外部应用扩展应用程序与www服务器交互的一个标准接口。按照cgi标准编写的外部扩展应用程序可以处理客户端浏览器输入的数据,从而完成客户端与服务器的交互操作。而cgi规范就定义了web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的后又如何进行处理等内容。通过cgi可以提供许多静态的html网页无法实现的功能,比如搜索引擎、基于web的数据库访问等等。

3.1 工作原理

(1)www和cgi的工作原理

http协议是www的基础,它基于客户/服务器模型,一个服务器可以为分布在网络中处的客户提供服务;它是建立在tcp/ip协议之上的“无连接”协议,每次连接只处理一个请求。在服务器上,运行产着一个守护进程对端口进行监听,等待来自客户的请求。当一个请求到来时,将创建一个子进程为用户的连接服务。根据请求的不同,服务器返回html文件或者通过cgi调用外部应用程序,返回处理结果。服务器通过cgi与外部程序和脚本之间进行交互,根据客户端在进行请求时所采取的方法,服务器会收集客户所提供的信息,并将该部分信息发送给指定的cgi扩展程序。cgi扩展程序进行信息处理并将结果返回服务器,然后服务器对进行分析,并将结果发送回客户端。

外部cgi程序与www服务器进行通信、传递有关参数和处理结果是通过环境变量、命令行参数和标准输入来进行的。服务器提供了客户端(浏览器)与cgi扩展程序之间的信息交换的通道。cgi的标准输入是服务器的标准输出,而cgi的标准输出是服务器的标准输入。客户的请求通过服务器的标准输出传送给cgi的标准输入,cgi对进行处理后,将结果发送到它的标准输入,然后由服务器将处理结果发送给客户端。

(2)url编码

客户端浏览器向服务器发送数据采用编码的形式进行。该编码就是crl编码。编码的主要工作是表单域的名字和值的转义,具体的做法为:每一对域和值里的空格都会被替换为一个加号(+)字符,不是字母或数字的字符将被替换为它们的十六进制数字形式,格式为%hh。hh是该字符的ascii十六进制值。

标签将被替换为“%0d%0a”。

信息是按它们在表单里出现的顺序排列的。数据域的名字和数据域的值通过等号(=)字符连在一起。各对名/值再通过“&”字符连接在一起。经过这些编码处理之后,表单信号就整个成为一个连续的字符流,里面包含着将被送往服务器的全部。

因为表单输入都是经过编码后传递给脚本程序的,所以cgi扩展程序在使用这些参数之前必须对它们进行解码。

3.2 cgi外部扩展程序编制

服务器程序可以通过三种途径接收:环境变量、命令行和标准输入。具体使用哪一种方法要由标签的method属性来决定。

在“method=get”时,向cgi程序传递表单编码信息的正常做法是通过命令来进行的。大多数表单编码信息都是通过query_string的环境变量来传递的。如果“method=post”,表单信息将通过标准输入来读取。还有一种不使用表单就可以向cgi传送信息的方法,那就是把信息直接追回在url地址后面,和url之间用问号(?)来分隔。

上一篇:改革课堂教学的四点尝试 下一篇:关于中学计算机教学的四点看法