转自:http://blog.chinaunix.net/uid-13408389-id-2894933.html

分类:

CGI是什么

CGI是CommonGatewayInterface 的简称。是一个用于定Web服务器与外部程序之间通信方式的标准,使得外部程序能生成HTML、图像或者其他内容,而服务器处理的方式与那些非外部程序生成的HTML、图像或其他内容的处理方式是相同的。因此,CGI程序册仅使你能生成表态内容而能生动态内容。使用CGI的原因在于它是一个定义良好并被广泛支持的标准,没有CGI就不可能实现动态的Web页面,除非使用一些服务器中提供的特殊方法(如今,也有除CGI之外的其他技术逐渐在成为标准)。

CGI主要的功能是在WWW环境下,藉由从客户端传递一些讯息给WWWServer,再由WWWServer去启动所指定的程式码来完成特定的工作。所以更明确的说,CGI仅是在WWWServer上可执行的程式码,而她的工作就是控制讯息要求而且产生并传回所需的文件。使用CGI,你的Server可以读取并显示在客户端无法读取的格式(像是SQLDataBase)。而且可以像闸道(Gateway)一样,在伺服端和客户端之间,产生客户端所需要的讯息。基本上,在此种主从式(Client/Server)的环境之下,其IPC(InterProcess Communication)的协定是利用讯息传递及记忆体分享(环境变数)的方式来完成。CGI有其特定的写法及规格,必须遵守其原则,方可达到主从端资讯交流的目的。

什么是CGI

1. 定义:

CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器

上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。

2. 功能:

绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服

务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使

网页具有交互功能。

3. 运行环境:

CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。

在其它操作系统(如:windows NT及windows95等)的服务器上

也广泛地使用CGI程序,同时它也适用于各种类型机器。

4. CGI处理步骤:

⑴通过Internet把用户请求送到服务器。

⑵服务器接收用户请求并交给CGI程序处理。

⑶CGI程序把处理结果传送给服务器。

⑷服务器把结果送回到用户。

5. CGI服务器配置:

CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器

上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进

行必要的设置。

配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一

特定的目录中或使其带有特定的扩展名。

⑴CREN格式服务器的配置:

编辑CREN格式服务器的配置文件通常为/etc/httpd.conf/

在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*.exec

命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录

名字,并表示它出

现在系统主机后的第一个目录中,如:

http://edgar.stern.nyn.edu/cgi-bin/

命令中的第二个参数表示CGI程序目录放在系统中的真实路径。

CGI目录除了可以点网络文件放在同一目录中,也可以放在系统

的其它目录中,但必须保证在你的系统中也具有同样的目录。在

对服务器完成设置后,须重新启动服务器(除非HTTP服务器是用

inetd启动的)。

⑵NCSA格式服务器的配置

在NCSA格式服务器上有两种方法进行设置:

①在srm.conf文件(通常在conf目录下)中加入:

Script Alias/cgi-bin/cgi-bin/

Script Alias命令指出某一目录下的文件是可执行程序,且这

个命令是用来执行

这些程序的;此命令的两个参数与CERN格式服务器中的Exec命

令的参数的含意一样。

②在srm.conf文件加入:

Add type application/x-httpd-cgi.cgi

此命令表示在服务器上增加了一种新的文件类型,其后第一个

参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表

示以这一扩展名为扩展名的文件是CGI程序。

在用上述方法之一设置服务器后,都得重新启动服务器(除非

HTTP服务器是用inetd启动的)。

CGI是什么

好了,现在我们来说到底什么是CGI。Common Gate Intergace听起来让人有些专业, 我们就管它叫CGI好了。在物理上,CGI是一段程序,它运行在Server上,提供同客户段 Html页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户段输入一些信息,如名字之类的东西。

接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI 目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

既然CGI是一种程序,自然需要用编程语言来写。你可以用任何一种你熟悉的高级语言, C,C++,C shell和VB。值得特别指出的,有一种叫Perl的语言。其前身是属于Unix专用的高 级语言,其具有强大的字符串处理能力而成为现在写CGI,特别是表单类程序的首选。最近它已经有了Window95,和winnt版本。你可以在搜索程序里找到在那里下载它。 VB是Ms的杀手锏,从目前的情况看,微软公司正试图使VB无所不能。自然也包括在Internet 请各位注意,VB开发的程序只能在windows平台上被执行,所以它有一定局限。 C Shell,经典的语言。可惜能做的事情不多,而且必须在Unix平台下。 C,C++,正真的无所不能。可是在写CGI的时候显得非常难以掌握。特别是缺乏可以灵活使用的字符串处理函数。对程序员的要求也比较高,维护复杂。

最后要提醒各位,因为CGI是Server和Clinet的接口,所以对于不同的Server,CGI程序的移值是一个很复杂的问题。一般对于不同的Server,决没有两个可以互相通用的CGI。实际上 这就是CGI程序最复杂的地方。

cgi:common gate interface ,通用网关接口。

以前网站上的动态功能都是用CGI实现,而写CGI的语言有很多,C也行。最流行的是perp。

后来sun公司推出了servlet基本上取代了CGI。

后来又推出了JSP试图取代servlet。

所以呢,如果不想学深的话,只学JSP就行(要先学JAVA)/。

否则学完JSP再学SERVLET。

CGI就不用了,已基本被淘汰。

 
 
与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet有可能彻底取代CGI。
  在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。
  在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择。
  * 方便
  Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
  * 功能强大
  在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
  * 可移植性好
  Servlet用Java编写,Servlet API具有完善的标准。因此,为IPlanet Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。
  * 节省投资
   不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。

CGI是什么 搜索了这么多,大致看明白了保留下来。的更多相关文章

  1. runtime——消息机制

    本文授权转载,作者:Sindri的小巢(简书) 从异常说起 我们都知道,在iOS中存在这么一个通用类类型id,它可以用来表示任何对象的类型 —— 这意味着我们使用id类型的对象调用任何一个方法,编译器 ...

  2. SpringBoot | 第三十五章:Mybatis的集成和使用

    前言 最近收到公众号留言说,单纯的Mybatis的集成和使用.前面在第九章:Mybatis-plus的集成和使用介绍了基于mybatis-plus的集成和使用.后者也只是对mybatis进行了功能增强 ...

  3. 关于如何通过定义自己的CameraManager来控制视角

    2016.8.30 发现了这个函数,可以直接获得摄像机的位置和旋转. Controller->GetPlayerViewPoint(CamLoc, CamRot); 最近看了几天PlayerCa ...

  4. 一个无锁消息队列引发的血案(四)——月:RingQueue(上) 自旋锁

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  5. [置顶] 智能家居开源项目 The open Home Automation Bus (openHAB)

    ================================================================================ 2014-05-19 论文的事情太多, ...

  6. IT人该如何未雨绸缪,不断提升自己的竞争力?同时尽量避免风险?

    人会慢慢变老,变老后精力,记忆力乃至身体会慢慢变差,这是无法逆转的自然规律.随之会产生的是对中年危机的忧虑乃至恐惧,比如担心能力精力不及年轻人,从而导致收入锐减乃至失业. 对此我有如下三点不解.第一, ...

  7. 【经典/基础BFS+略微复杂的题意】PAT-L3-004. 肿瘤诊断

    L3-004. 肿瘤诊断 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是 ...

  8. nyoj 10 skiing(记忆化搜索)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  9. GOOGLE搜索從入門到精通V4.0

    1,前言2,摘要3,如何使用本文4,Google簡介5,搜索入門6,初階搜索 6.1,搜索結果要求包含兩個及兩個以上關鍵字 6.2,搜索結果要求不包含某些特定資訊 6.3,搜索結果至少包含多個關鍵字中 ...

随机推荐

  1. PL/SQL&存储过程||存储函数&触发器

    plsql 有点:交互式  非过程化   数据操纵能力强   自动导航语句简单   调试简单   想率高 声明类型的方式 1.基本类型 2.引用变量 3.记录型变量 基本格式 declare 声明 b ...

  2. java标识符与命名规则

    标识符就是给变量.类或方法起的名字.可以用字母.下划线或美元符号开头,区分大小写,没有最大长度限制.(关键字除外) 关键字   访问控制 private protected public       ...

  3. Linux的软连接和硬连接

    1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引 ...

  4. Flatten 2D Vector -- LeetCode

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [,], [], [,,] ] By cal ...

  5. APIO2018练习赛伪题解

    传送门:https://pcms.university.innopolis.ru/statements/org/apio/2018/practice/statements.pdf 主要就在于后面三道构 ...

  6. 【bzoj3687】【简单题】bitset

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=64333782 这次的图是自己画的,方便的话点个赞 ...

  7. onItemClick(AdapterView<?> parent, View view, int position, long id)

    Public Methods public abstract void onItemClick (AdapterView<?> parent, View view, int positio ...

  8. SQL Server 2005 系统数据介绍:dm_exec_connections

    原文:SQL Server 2005 系统数据介绍:dm_exec_connections 转载:http://msdn.microsoft.com/zh-cn/library/ms181509(SQ ...

  9. Delphi CRC16校验算法实现(转)

    循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出CRC值并随 ...

  10. 【微信】微信小程序 调用this.setData报错this.setData is not a function;

    在调用方法过程中 报错如下: 代码如下: Page({ /** * 页面的初始数据 */ data: { userLocalInfo:'用户地址' }, /** * 返回swapping页面 */ b ...