CGI程序与web间数据交互

CGI是通用网关接口的简称,通过CGI可实现客户端浏览器与服务器之间数据的交互。

CGI通信系统由显示在前端的HTML页面以及运行在服务端上的cgi程序组成。web客户端显示的是相关的html文件,这些文件一般存储在目录/www下,CGI程序一般为后缀是.cgi的文件,存储路径一般也是/www。

CGI通信系统的结构框图如下:


 步骤1:web客户端对服务器发起HTTP请求;

步骤2:环境变量向CGI程序发送数据;

步骤3:重定向CGI标准输出到管道,服务器通过管道获取CGI输出数据;

步骤4:服务器向客户端发送HTTP响应结果;

在web客户端与服务器CGI程序交互的过程中,需前置以下条件:第一,解析GET表单,建立环境变量;第二,建立服务器与CGI程序之间的通信管道,重定向CGI程序标准输出到服务器的管道读端口。

客户端发起HTTP请求时,浏览器向服务器发送一个URL,服务器根据URL指向一个应用程序,服务器执行哪些cgi程序由浏览器发起的请求决定。每个CGI程序只能处理一个用户请求,在激活一个CGI程序进程时创建属于该进程的环境变量。

以下是一个前端页面提交表单的例子,代码如下:

<div class="login">
<form method="post" action="/checklogin.cgi">
<div class="item user"><input type="text" placeholder="请输入用户名" name="username" id="username"/></div>
<div class="item pass"><input type="password" placeholder="请输入密码" name="password" id="password"/></div>
<div class="btn"><button type="submit">登录</div>
</form>
</div>

通过POST的方式将用户名和密码传递给checklogin.cgi程序,客户端来的用户数据将存放在CGI进程的标准输入中,同时将用户数据的长度赋予环境变量中的CONTENT_LENGTH,客户端用POST方式发送数据有一个相应的MIME类型,该类型记录在环境变量CONTENT_TYPE中,由checklogin.cgi验证用户名和密码的正确性,验证结束后根据业务逻辑再实现页面的跳转。

CGI程序被HTTP服务器调用时,环境变量中包含了很多有用信息, 包括当前的URL,GET参数,客户端IP地址,请求头等等信息。相关环境变量如下:

REQUEST_METHOD 服务器与CGI程序之间的信息传输方式
QUERY_STRING 采用GET时所传输的信息
CONTENT_LENGTH STDIO中的有效信息长度
CONTENT_TYPE 指示所传来的信息的MIME类型
CONTENT_FILE 使用Windows HTTPd/WinCGI标准时,用来传送数据的文件名
PATH_INFO 路径信息
PATH_TRANSLATED CGI程序的完整路径名
SCRIPT_NAME 所调用的CGI程序的名

环境变量是一个保存用户信息的内存区。当客户端通过浏览器发出CGI请求时,服务器就寻找本地的相应CGI程序并执行它。在执行CGI程序的同时,服务器把该用户的信息保存到环境变量里。CGI程序首先查询服务器与CGI程序之间的信息传输方式REQUEST_METHOD,如果是POST,就从环境变量的len,然后到该进程相应的标准输入取出len长的数据。如果是GET,则用户数据就在环境变量的QUERY_STRING

猜你喜欢

转载自blog.csdn.net/weixin_38293850/article/details/108056184