| |
CGI教程(10)CGI 规范
|
日期:2007年5月10日 作者:
查看:[大字体 中字体
小字体]
|
CGI 规范
本节教程是CGI/1.1的规范,更高版本的协议是向下兼容的,也就是说CGI/1.1的规范同样使用于更高版本的规范。
服务器于CGI脚本有四种主要的方法进行通讯:环境变量、命令行、标准输入和标准输出。
CGI环境变量的规范
为了传递关于从服务器到脚本的信息请求的数据,服务器使用了命令行参数比如环境变量。这些变量是在当服务器执行网关程序时被设置的。
下面的环境变量不是特殊请求而是为请求的设置
SERVER_SOFTWARE :相应请求的信息服务软件的名字和版本,其格式为name/version ;
SERVER_NAME :服务器的主机名或者IP地址。
GATEWAY_INTERFACE :服务器遵从的CGI规范的修订版。格式为:CGI/revision
CGI 规范
以下的环境变量是由网关程序实行的请求规范:
SERVER_PROTOCOL :信息协议的名字和修订版。格式为protocol/revision 。
SERVER_PORT :发送请求的端口号。
REQUEST_METHOD :请求的方法。对于HTTP,有"GET"、 "HEAD"、 "POST"等等。
PATH_INFO :额外的路径信息,由客户端给出的。换句话说,脚本可以由他们的虚拟路径名来访问,在这个路径的末尾附带额外的信息。这个额外信息被作为PAHT_INFO发送。这个信息如果在传递给CGI脚本之前来自URL就可以由服务器来解码。
PATH_TRANSLATED :服务器提供了一个PAHT_INFO的转换版本,它需要路径并且为它做虚拟到物理的映射。
SCRIPT_NAME :将要执行的脚本的一个虚拟路径。
QUERY_STRING :在引用脚本的URL中紧跟在?之后的信息。这是一个查询信息。它不能以任何方式来解码。这个变量总是可以在有查询信息的时候被设置,而不管命令行解码。
REMOTE_HOST :产生请求的主机名。如果服务器没有这个信息,它应该设置REMOTE_ADDR 并且让这个为未设置状态。
REMOTE_ADDR :产生请求的远程主机的IP地址。
AUTH_TYPE :如果服务器支持用户验证,脚本就受保护。这是一个协议规范授权方法,用于验证用户。
REMOTE_USER :如果服务器支持用户验证,脚本就受保护。这是他们授权的用户名。
REMOTE_IDENT :如果HTTP服务器支持RFC931认证,这个变量将被设置为从服务器取出的远程用户名。这个变量的用法应该只限制在登陆的时候。
CONTENT_TYPE :对于哪些已经附上信息的请求,比如 HTTP POST和PUT,这是数据的内容类型。
CONTENT_LENGTH :客户端给的数据内容的长度。
另外,来自客户端的文件头的几行被放置到环境中,它是前HTTP紧跟着文件头名字。头名字中的任何字符在前面都被加上了_字符。服务器可能会排除任何的已经被它处理的文件头,比如授权、内容类型和内容长度等等。如果需要的话,如果文件头的长度超过了系统环境的藓,服务器可以选择用来排除他们。
CGI 规范
CGI命令行选项规范
命令行只用在ISINDEX查询的情况。它不使用在HTML表单或者任何没定义的查询类型中。服务器应该为一个没有编码的=字符搜索信息来决定是否命令行被使用了,如果它发现了,命令行就不使用。这个就委托客户端在ISINDEX查询中编码等于号,这个被认为是安全的。
下面举个例子,使用网络命令和ISINDEX界面来观察"httpd"。你将会看到脚本会自动利用/cgi-bin/finger?httpd来调用它本身并且将会在命令行执行"finger httpd" ,还会为你输出结果。
如果服务器没有在QUERY_STRING找到"=" ,那么命令行不会被使用,任何的解码也没有被执行。这个查询利用适当的FORM提交解码器来维持于处理的联系。同时,作为一个例子,可以为提交"httpd=name"使用超级连接到网络指令脚本。因为QUERY_STRING包含了一个未编码的"=",所以没有被解码,这个脚本不知道它提交了一个有效的查询,而只是给你一个缺省的网络指令表单。
上一篇:CGI教程(11)错误脚本
下一篇:CGI教程(9)编写安全的CGI脚本
|
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
| |