zoukankan      html  css  js  c++  java
  • CGI是什么 搜索了这么多,大致看明白了保留下来。

    转自: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的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
  • 相关阅读:
    Node.js 学习笔记(二)
    微服务网关 zuul 替代者 gateway 网关路由
    flowable 6.6.0 绕过自带的登录限制(免登录)
    `flowable.common.app.idmurl` must be set (flowable 6.6.0)
    gateway 跨域问题解决方案
    ueditor 在springboot 打jar运行时 找不到图片附件路径问题
    springboot 打jar 包部署时 读取外部配置文件
    Navicat连接MySQL Server8.0版本时出现Client does not support authentication protocol requested by server;解决如下
    flowable 通过模型model ID部署流程
    springboot 配置日志输出
  • 原文地址:https://www.cnblogs.com/daxiong2014/p/5147529.html
Copyright © 2011-2022 走看看