|
| |
二、CGI设计初步
二、CGI设计初步
1. CGI数据传送方法:
客户有两种方法:
⑴通过环境变量,采用GET方式:
<form method="GBT" action="/cgi-bin/mycgi">…</form>
该法简单,但用cethod=get方式通过变量传送数据会因变量接受的
数据量有限而产生数据丢失。
⑵通过标准输入,采用POST方式──建议使用方式
标准输入法是通过method=post方式把数据传送到网关程序的入口。
数据在传输中是经过URL编码的,CGI程序在处理前需进行解码,由于
此法对数据量没有限制,因而传输中不会产生数据丢失。
2. 输入数据URL编码
URL编码就是浏览器把表单输入的数据传送到服务器时,将输入数
据编码、打包。从表单输入的变量及其数值,被编码为“参数名/参
数值”,同时把那此不能直接传输的数据转化为16进制。然后根据使
用的是GET方法还是POST方法,把它作为URL的一部分或直接送到服务
器。
3. CGI程序的特点
CGI程序是一种在www服务器上运行的程序,主要用于处理用户通
过表单输入的信息,在服务器上产生相应的作用,或把处理结果反
馈给浏览器,CGI程序须符合以下两个条件:
⑴CGI程序的输出要写标准输出
这样,服务器才能解释这一输出,并把它返回到浏览器。
⑵CGI程序的数据头要告诉服务器如何处理该程序的输出
为了使服务器能够解释CGI程序的输出,CGI程序要有一个特殊
的头作为第一个输出行,数据头可以是下列三种之一:
①数据类型(Content-type), 如:Content-type: text/html
② 地址类型(Location), 如:Location://www.w3.0rg
③状态类型(Status), 如:Status:204 No Respouse
4. CGI程序格式
CGI程序同下列三部分构成:
⑴数据解码部分:由浏览器传送给服务器的通过表单输入的数据
都是经过URL编码的,必须进行解码。如果不需要处理表单输入,
该部分可省略。
⑵数据头部分:必须包含这一部分作为第一个输出行,该行后必
须有一空格行。该行可以是下列三种之一:
① 数据类型(Content-type), 如:Content-type: text/html
②地址类型(Location), 如:Location://www.w3.org
③状态类型(Status), 如:Status:204 No Respouse
⑶CGI程序主体部分:对通过表单输入的数据进行处理,并输出
到标准输出。
5. CGI程序的数据类型:
若服务器要把数据传送给浏览器,则须在CGI程序中使用表示数
据类型的头,它将告诉浏览器如何解释该输入。
例1: 如服务器要判断回一个HTML文件,则CGI程序中的类型头
应定义为:
Content-type:text/html
例2: 如服务器要送回的文件类型是JEPG文件,则CGI程序中的
类型头应定义为:
Contert-type:image/jpg
其余的数据以此类推。
6. CGI程序的地址类型
若用户想在服务器上打开或加载一个现有的文件,则髯在CGI程
序中使用表示地址类型的头。
表示地址类型的头的值可以是一个URL全地址,也可以是去掉
http:和主机名的URL地址。
例1: Location: http://www.lne.com/index.html
例2: Location: http://www.w3.org/
例3: Location: http://lemay/the Book/index.html
7. CGI程序的状态类型
如果在传送最后服务器还要送一个特殊的状态码到浏览器,则须
在CGI程序中加入表示状态类型的头。状态码由HTTP定义。
例:Status: 204 No Response
此状态码表示这时浏览器不能从服务器得到任何反馈信息,
即服务器上的CGI
程序只是对输入进行处理而不作应答,浏览器界面保持不变。
8. CGI程序示例
下面是一个检索约翰是否登录的例子:
#!/bin/sh 数据头部分,声明数据格式
echo"Content-type:text/html" 为文本格式
echo 此处省略了解码部分
echo"<HTML><HEAD>"
echo"<TITLE>约翰登录了吗?</TITLE>"
echo"</HDAD><BODY>"
ison='who I grep lemay' 查询登录信自己 ,
if[-z"Sison:]; 并向标准输出设备
then echo"<P>约翰登录"。 输出查询到的信息。
elso echo"<P>约翰未登录"。
fi
echo "</BODT></HTML>"
|
回页首
|