文章摘自https://blog.csdn.net/nyist327/article/details/41049699

CGI是Web服务器和外部程序之间的一个接口。利用CGI程序可以处理从Web上客户端发送出来的表单和数据,并对此做出相关操作。这种反应可以是HTML文件、图片、声音、视频等可以在浏览器窗体上出现的任何数据。通用网关接口有两个含义。首先它为客户端用户通过www获取Internet上的其他服务,例如Archie、WAIS、Database等提供了一个接口,虽然不能直接在www上访问这些服务,但是您可以通过一个CGI程序和Web服务器访问它们。其次它就是您编写的程序和Web服务器间的接口标准。您所编写的处理客户端有关信息的程序必须遵循这个标准。

那么,CGI是如何在客户端的Web浏览器(如Netscape Navigator)和Web服务器(如NSCA HTTPd)间工作的呢?

当客户端的浏览器向Web服务器请求一个HTML文件时,服务器在收到请求后就去寻找这个文件并将找到的文件传送给客户端。而当客户端的请求是一个CGI程序时,Web服务器将激活客户端所请求的CGI程序。此时Web服务器所起的作用就好像是客户端和CGI程序间的中间人,如图所示。CGI程序的工作一般可以分为以下几个步骤。

1.客户端发出请求

首先,客户端的浏览器发出一个请求给Web服务器。如果这个请求是一个普通的文件(例如HTML文件、GIF或JPEG文件),Web服务器就将文件直接传送给客户端的浏览器。如果这个请求是一个CGI程序或外部应用,Web服务器将激活相应的CGI程序。例如:客户端传送来的请求可能是对一个数据库的检索,此时一个相应的CGI程序将被Web服务器激活,这个CGI程序将根据客户端要求的准则去检索相应的数据库,并通过Web服务器将结果传送给客户端。

2. Web服务器激活CGI程序

当Web服务器发现客户端浏览器传送来的请求不是一个普通文件而是一个CGI程序时,Web服务器就要激活这个CGI程序并执行它(比如:http://www.example.com/wiki.cgi)。

在这个CGI程序被执行前,Web服务器要为该CGI程序设置一些环境变量。这些环境变量被服务器用来向CGI程序传递一些非常重要的信息,例如当前Web服务器的状态、谁发出的调用等等。Web服务器为CGI程序所设置的环境变量的使用和正常的环境变量的使用没有任何区别。当CGI程序运行结束时,Web服务器为它设置的环境变量也随着消失。

每个被激活的CGI程序都有自己唯一的一组环境变量。事实上对于一个非常繁忙的Web服务器,可能同时会有同一个CGI程序的很多个进程在运行,这时每个CGI程序的进程都有自己的运行环境,互不影响。

3. CGI程序对客户端的请求做出反应

CGI程序通过环境变量或其他途经读取Web服务器所提供的客户端的输入数据并对这些数据进行处理,如果有必要CGI程序还要和一些外部的服务例如Archie、WAIS和Database等发生联系。最后CGI程序将通过Web服务器将处理结果传送给客户端。CGI程序可以根据需要产生各种类型的数据。

4. Web服务器将CGI程序的处理结果传送给客户端

Web服务器收到了CGI程序的处理结果后将对CGI程序的输出进行检查,如有必要,将为CCI程序的输出结果加上一些HTTP协议所必须的HTTP头信息。检查完成后将把CGI程序的输出传送给客户端。

5. Web服务器中断和客户端浏览器的连接。

6. Web浏览器将CGI程序的输出显示在浏览器的窗体上。

CGI的工作原理的更多相关文章

  1. CGI/FastCGI/mod_php工作原理

    先了解一下普通cgi的工作流程:web server收到用户请求,并把请求提交给cgi程序,cgi程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web ser ...

  2. Fast CGI 工作原理

    http://www.cppblog.com/woaidongmao/archive/2011/06/21/149092.html 一.FastCGI是什么? FastCGI是语言无关的.可伸缩架构的 ...

  3. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  4. Web服务器的工作原理

    Web服务器的工作原理 Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了 ...

  5. web服务器工作原理

    Web服务器工作原理概述 转载自http://www.importnew.com/15020.html 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它 ...

  6. 【转载】Web应用工作原理

    问题描述:           Web应用工作原理   问题解决:          参考资料:http://blog.csdn.net/lcore/article/details/8964642   ...

  7. Nginx工作原理和优化、漏洞

    1.  Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HT ...

  8. Nginx 工作原理和优化、漏洞

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...

  9. Sftp和ftp 差别、工作原理等(汇总ing)

    Sftp和ftp over ssh2的差别 近期使用SecureFx,涉及了两个不同的安全文件传输协议: -sftp -ftp over SSH2 这两种协议是不同的.sftp是ssh内含的协议,仅仅 ...

随机推荐

  1. android Button上面的英文字符串自动大写的问题解决

    xml文件中加入: android:textAllCaps="false"

  2. PHP 【四】

    数组 $string = array(x,y,z); <?php$cars=array("Volvo","BMW","Toyota") ...

  3. CEC和ARC介绍

    众所周知,HDMI作为一个数字化视频音频的接收标准,是可以同时传输视频和音频的,当然随着HDMI版本的提升,它的功能也一直在增强.事实上 当HDMI升级到1.3时,人们就发现了HDMI多了一个CEC功 ...

  4. codeforces 893F - Physical Education Lessons 动态开点线段树合并

    https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的 ...

  5. adb.exe 已停止工作解决办法

    最近因为工作原因,接触了下Android Studio,在使用真机调试的时候碰到了adb.exe 已经停止工作的错误. 虽然网上有很多和我一样的教程,但是我觉的还是记录一下自己的情况比较好,毕竟每个人 ...

  6. MinGW GCC 8.1.0 2018年5月2日 出炉啦

    MSYS_MinGW-w64_GCC_810_x86-x64.7z for x86 x64 59.0 MB发布日期: 2018-05-04 下载地址:https://sourceforge.net/p ...

  7. JS 禁用鼠标右键

    oncontextmenu="window.event.returnValue=false" style="overflow-y: hidden; overflow-x: ...

  8. Scrapyd

    scrapyd 安装 scrapyd-中心节点,子节点安装scrapyd-clientpip3 install scrapydpip3 install scrapyd-client scrapyd-c ...

  9. robot framework 上个用例的输出作为下个用例的输入 (Set Global Variable的用法)

    变量的作用域 通常情况下,每个变量默认都是局部变量. 一个case里的变量,作用域在这个case内部: 一个userkeyword里的变量,作用域在这个userkeyword内部: 一个文件型suit ...

  10. 上传jar包到maven中央仓库过程中遇到的一些问题总结!

    网上有很多相关教程, 我按步骤一步步走下来, 都还算顺利, 简单列举一下步骤以及其中需要注意的几个点(不详细, 不适合当教程) 第一步: 到https://issues.sonatype.org/se ...