文章摘自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. js限制字符串长度,超出的部分补...

    value?(value.length>12?(value.substring(0,12))+"...":value):""

  2. Javascript arguments.callee和caller的区别

    一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函数和调用它的函数的参数. 语法: 1 [function.]argument ...

  3. maven 一些整理

    1.发布jar包到私服,需要进入项目目录 发布jar   :mvn deploy 发布源码 :mvn source:jar deploy,这个需要依赖一个maven插件: <plugin> ...

  4. 肺结节CT影像特征提取(三)——肺结节CT影像特征提取系统软件设计

    肺结节的特征提取在临床中有着重要应用,在上篇文章已经对肺结节的基本特征和CT影像特征提取算法有了介绍,提出了三类肺结节CT影像特征提取算法.本文重点介绍肺结节CT影像特征提取系统的功能介绍及使用,利用 ...

  5. JS基础之传参(值传递、对象传递)

    一.概念 我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference).在计算机科学里,这个部分叫求值策略(Evaluation Strategy). ...

  6. 新手如何理解JS面向对象开发?

    今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也 ...

  7. sqlserver 迁移

    背景 好久没用sqlserver了,好多东西也都记不住了,这次sqlserver同事问了几个问题,也一就回忆下.主要也把sqlserver的迁移过程列下.具体就不多说了. sqlserver 特点是只 ...

  8. storage和memory

    memory:使用的是值传递,默认使用的是memory,传递的是值 storage:引用传递,传过来的是指针,后面一定要加上internal,private pragma solidity ^; co ...

  9. PHP之static静态变量详解

    在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料. static用法如下: 1.static 放在函数内部修饰变量 2.s ...

  10. scrapy相关 通过设置 FEED_EXPORT_ENCODING 解决 unicode 中文写入json文件出现`\uXXXX`

    0.问题现象 爬取 item: 2017-10-16 18:17:33 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.hu ...