web服务器与cgi程序最佳组合

原文链接:web服务器与cgi程序最佳组合

web服务器通过接受用户请求交将用户请求的内容返回给用户,主要功能是提供网上信息浏览服务,支持http、https协议,常见的web服务器有apache、nginx、iis等服务器,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(服务器端脚本),这里的服务脚本即是cgi程序。

cgi程序是b/s模式中,即浏览器/服务器,是由用户在浏览器输入域名或ip,请求web服务器,然后web服务器通过自身提供的cgi接口来调用cgi脚本(php、python、c、c++等),然后cgi脚本将程序执行结果再传给web服务器,最后再把这些内容返回级用户,这时用户就看到了自已请求的内容。

客户端传输数据的并获取数据的原理:当服务端守护进程接收到客户端用户代理(如浏览器)提交的CGI请求时,所创建的CGI子进程会设置与CGI请求内容有关的环境变量,并建立服务器与外部CGI程序之间通讯的通道(即标准I/O)。CGI程序可以通过环境变量,标准I/O或命令行参数获取客户端用户输入的数据。数据的获取与请求所采用的HTTP方法(Method)和用户所使用的请求方式有关。

一、web服务器与cgi交互内容

1、获取环境变量
环境变量的类别很多,包含客户端和服务端的详细信息。在一般CGI程序开发中,下述几个环境变量在数据传递中起着重要作用。
*GATEWAY-INTERFACE
CGI程序所使用的CGI标准接口的版本号。如使用的CGI1.1版,该变量表示为”CGI/1.1″
*REQUEST-METHOD
HTTP请求方法。根据该变量值可判断CGI请求所采用的请求方法,以决定是通过Stdin还是通过环境变量QUERY-STRING获取客户端传输数据。
*QUERY-STRING
QUERY-STRING是CGI程序URL中”?”之后的数据。当使用ISINDEX查询或FORM表使用GET方法时,客户端传输数据可以通过读取该变量而获得。
*CONTENT-LENGTH
CONTENT-LENGTH表示客户端传输数据的字节数。
*CONTENT-TYPE
CONTENT-TYPE表示客户端传输数据的数据编码类型。
利用-environ(int)函数可以获得所有的环境变量及其值;利用getenv(constchar*)函数可以获得指定环境变量的相应值。
2、HTTP请求方法
客户端用户代理提交的CGI请求是HTTP请求,其中包括HTTP请求方法。HTTP协议定义的请求方法中常用的主要有GET和POST。客户端FORM表的METHOD属性用来设置请求方法,其缺省值为GET。
如果在FORM中使用GET方法,CGI程序通过环境变量QUERY-STRING获取客户端传输数据。
如果在FORM中使用POST方法,CGI程序通过通过CONTENT-LENGTH获取客户端传输数据的字节数,通过Stdin读取客户端传输数据。

二、用户请求参数的提取和处理
通过GET方式传输请求参数时,一般格式为:
name[1]=value[1]&name[2]=value[2]&...name[i]=value[i]...name[n]=value[n]
其中name[i]表示变量名,它是在FORM表中某输入域的名字;value[i]表示变量值,它是用户在FORM表中某输入域中输入的值,这些参数放在环境变量中QUERY-STRING中,可以通过此变理来获取,现在的脚本程序一般都已经cgi内核处理完成,直接通过相应的函数获取即可,如php的$_GET和$_POST等。

三、web服务器向客户端返回应答
CGI程序处理结束后,通过标准输出流将应答信息传递给服务器,再由服务器返回给发出请求的客户端。其输出的应答信息是HTTP应答消息,它一般由两部分组成:应答头和应答数据。
常见的应答头包括三种头域:Content-Type(数据编码类型,用MIME类型表示),Location(特定文档的URL,这种情况不直接向客户端输出内容而输出该URL)和Status(处理结果的状态码和状态描述)。HTTP应答头由几行格式相同的文本构成,每行的基本格式为:”头域名:该域内容”。应答头和应答体之间用一空行加LF(或CR/LF)分隔。应答体为CGI扩展程序的输出数据,其数据类型应该与Content-Type值相一致。
CGI程序的输出可以用printf()、puts()等标准I/O函数来实现。

四、CGI程序语言的选择
在开发CGI程序过程中,可根据实际情况(服务器提供的接口、实际需求和程序员经验等)选择编程语言,如C、C++、Perl、php等。如果选用C/C++等语言,必须编译成可执行文件;如果选用Perl、php等解释语言,服务器需要通过调用脚本相应的解释器来处理,如php的解释器其实就是php5.exe(windows)这个exe文件,linux下的php5可执行文件。

五、常用的web服务器与cgi的组合

apache+mod_php5+php、nginx+php-fpm+php,apache通过内嵌lib来扩展调用php的cgi脚本,而nginx通过调用php的cgi脚本而完成请求响应。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值