环境变量学习
在进行CGI编程的开始之前,我们必须先了解一下WEB服务器提供的一些常用的环境变量,因为我们的编程与他们是息息相关的,虽然不会完全用到。在Apache安装配置完成之后,则可以用它提供的CGI程序text-cgi来查看CGI环境变量的值,其内容如下:
#!/bin/sh
#disable filename globbing
set-f
echo"Content-type:text/plain;charset=iso-8859-1"
echo
echo CGI/1.0 test script report:
echo
echo argc is$#.argv is"$*".
echo
echo SERVER_SOFTWARE=$SERVER_SOFTWARE
echo SERVER_NAME=$SERVER_NAME
echo GATEWAY_INTERFACE=$GATEWAY_INTERFACE
echo SERVER_PROTOCOL=$SERVER_PROTOCOL
echo SERVER_PORT=$SERVER_PORT
echo REQUEST_METHOD=$REQUEST_METHOD
echo HTTP_ACCEPT="$HTTP_ACCEPT"
echo PATH_INFO="$PATH_INFO"
echo PATH_TRANSLATED="$PATH_TRANSLATED"
echo SCRIPT_NAME="$SCRIPT_NAME"
echo QUERY_STRING="$QUERY_STRING"
echo REMOTE_HOST=$REMOTE_HOST
echo REMOTE_ADDR=$REMOTE_ADDR
echo REMOTE_USER=$REMOTE_USER
echo AUTH_TYPE=$AUTH_TYPE
echo CONTENT_TYPE=$CONTENT_TYPE
echo CONTENT_LENGTH=$CONTENT_LENGTH
可以发现这是一个非常典型的Shell脚本,这可以说明Shell也是可以写CGI程序的。在我的windows下的世界之窗浏览器下显示的结果如下
CGI/1.0 test script report:
argc is 0.argv is.
SERVER_SOFTWARE=Apache/2.2.14(Unix) /*web服务器的版本和所使用的操作系统*/
SERVER_NAME=192.168.1.2 /*由于我没有做DNS所以服务器名字以IP显示*
GATEWAY_INTERFACE=CGI/1.1 /*CGI的版本*/
SERVER_PROTOCOL=HTTP/1.1 /*HTTP协议版本,这是最新版*/
SERVER_PORT=80 /*web服务器的端口号*/
REQUEST_METHOD=GET /*客户端得请求方式*/
HTTP_ACCEPT=*/* /*客户端所能接受的MIME文件的类型*/
PATH_INFO=
PATH_TRANSLATED=
SCRIPT_NAME=/cgi-bin/test-cgi /*CGI程序的信息*/
QUERY_STRING=
REMOTE_HOST=
REMOTE_ADDR=192.168.1.67 /*这是我的客户端的IP*/
REMOTE_USER=
AUTH_TYPE=
CONTENT_TYPE=
CONTENT_LENGTH= /*在请求方式为POST是这里为表单的字节数*/
具体的环境变量如下描述:
REOUEST_METHOD:这个环境变量指出服务器与CGI程序之间的信息传递方式。一般包括两种:POST和GET。这个环境变量能够帮助确定请求是否是一个表单的提交和确定用户数据时怎样用请求进行传递的。GET是以明码式附加到url后面发送到服务器的,在安全上不行且有字节限制,但速度优于POST。POST信息传递的数据对于用户是不可见的再安全上由于GET,且字节数没限制。
CONTENT_TYPE:这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
CONTENT_LENGTH:如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
QUERY_STRING:如果服务器与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号‘?’分隔。例如:http://www.light.com/hello.html?frist=hello&second=world,环境变量QUERY_STRING的值为frist=hello&second=world.
CONTENT_FILE:当采用windows HTTPD/WinCGI标准时,这个环境变量包含了用来传送数据的文件名。
REMOTE_ADDR:这个环境变量的值是发送请求的客户机的IP地址,例如上面的192.168.1.67。这个值总是存在的。而且它是Web客户机需要提供给Web服务器的唯一标识,可以在CGI程序中用它来区分不同的Web客户机。
REMOTE_HOST:这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持你想查询,则无需定义此环境变量。
AUTH_TYPE:如果服务器支持保护CGI程序的验证机制,这个环境变量的值就是验证机制的类型。
REMOTE_USER:如果环境变量AUTH_TYPE被设置了,即CGI查询受客户机验证机制保护,那么这个环境变量将包含带验证机制的用户名。记住,AUTH_TYOE与REMOTE_USER只有在用户被服务器成功地确认为合法用户以后才被设置。
SERVER_NAME:这个环境变量的值是Internet domain名的全称,它包含了服务器的主机名或者其IP地址。例如上面是服务器的IP :192.168.1.67.这个值在服务器的管理中的General中设置。
SERVER_PORT:这个环境变量的值包含了服务器接受请求时所使用的端口号,Web服务器使用这个端口来监听到达的CGI请求。例如上面的值为80,也可能为8080。
SERVER_PROTOCOL:这个环境变量的值包含了用于发送请求的协议的名称和版本号。目前,只有HTTP支持CGI标准。例如,上面的值为HTTP/1.1。
SERVER_SOFTWARE:这个环境变量的值包含了调用CGI程序的HTTP服务器的名称和版本号。例如,上面的值为Apache/2.2.14(Unix)
GATEWAY_INTERFACE:这个环境变量的值指示服务器实现的CGI版本。例如其之可能为:CGI/1.1.因为CGI是一个发展中的标准,因此这个环境变量对设计一个CGI程序会有所帮助,因为这个程序可能会使用不同的WEB服务器或者使用同一个未必服务器的不同版本。
SCRIPT_NAME:这个环境变量的值包含了调用CGI程序时所使用的文件名。例如上面的值为/cgi-bin/test-cgi
PATH_INFO:这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
PATH_TRANSLATED:只用部分服务器支持这个环境变量。它包含CGI程序的完整路径。例如,如果服务器的根路径是/usr/local/apache2/,而CGI程序的URL标识是192.168.1.2/cgi-bin/hello.cgi,则环境变量PATH_TRANSLATED所包含的值应为:/usr/local/apache2/cgi/bin/hello.cgi。
HTTP_ACCEPT:这个环境变量的值是客户机所支持的MIME类型清单。各个类型之间用逗号分隔,例如image/gif,image/x-xbitmap,and*/*.星号*为通配符,表示可以接受任意数据类型。大多数服务器和客户机都未使用这个环境变量,以后的服务器很可能可以把数据自动转换成客户机支持的格式