zoukankan      html  css  js  c++  java
  • CGI(通用网关接口)

    CGI是一种规范,是Web 服务器运行时外部程序的规范。

    公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。

    经过CGI规范处理过的应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI。


     Web服务器如何向扩展应用程序发送消息

    <通过CGI规范定义的web服务器向扩展应用程序发送消息>

    CGI规范定义了Web服务器如何向扩展应用程序发送消息在收到扩展应用程序的信息后又如何进行处理等内容对于许多静态的HTML网页无法实现的功能,通过 CGI可以实现,比如表单的处理、对数据库的访问、搜索引擎、基于Web的数据库访问等等
     
    使用CGI实现客户端与服务器的交互有以下几个标准步骤,具体步骤如下:
    (1)Web 客户端的浏览器将URL(统一资源定位符)与Web服务器相连。
    (2)Web 浏览器将URL的其余部分提供给服务器。
    (3)Web 服务器将URL转换成路径和文件名。
    (4)Web 服务器发送 HTML 和别的组成请求页面的文件给客户。一旦页面内容传送完,这个连接自动断开。
    (5)在客户端,HTML脚本提示用户做动作或输入。当用户响应后,客户请求Web服务器建立一个新的连接。
    (6)Web 服务器把这些信息和别的进程变量传送给由HTML以URL的形式指定CGI程序。
    (7)CGI 根据输入作出响应,把响应结果传送给 Web 服务器。
    (8)Web 服务器把响应的数据传给客户,完成后关闭连接。

    服务器端 CGI 程序接收信息有三种途径:环境变量、命令行和标准输入。

    其中环境变量是指 CGI 定义一组环境变量,通过环境变量可传递数据。

    服务器收到来自浏览器的数据,调用 CGI 脚本,CGI 脚本将收到的数据转换成环境变量并从中取出所需要的内容。

    <form>标签的 METHOD 属性来决定具体使用哪一种方法。

    在“METHOD=GET”时,向 CGI 传递表单编码信息的是通过命令来进行的。表单编码信息大多数是通过环境变量 QUERY_STRING 来传递的。

    若“METHOD=POST”,表单信息通过标准输入来读取。还有一种不使用表单就可以向 CGI 传送信息的方法,那就是把信息直接附在 URL 地址后面,信息和URL 之间用问号(?)来进行分隔。

    GET 方法是对数据的一个请求,被用于获得静态文档。GET 方法通过将发送请求信息附加在 URL 后面的参数。

    当 GET 方法被使用时,CGI 程序将会从环境变量 QUERY_STRING获取数据。为了正确的响应客户端发来的请求,CGI 必须对 QUERY_STRING 中的字符串进行分析。当用户需要从服务器获取数据,但服务器上的数据不得改变时,应该用 GET 方法;

    但是如果请求中的字符串超过了一定长度,通常是 1024 字节,那么这时,只能用 POST 方法。

    POST 方法:浏览器将通过填写表单将数据传给服务器时一般采用POST 方法。在发送的数据超过 1024 字节时必须采用 POST 方法。当 POST 方法被使用时,Web 服务器向CGI 程序的标准输入 STDIN 传送数据。环境变量 CONTENT_LENGTH 存放着发送的数据长度。CGI 程序必须检查环境变量 REQUEST_METHOD 以确定有没有采用了 POST 方法,并决定是否要读取标准输入STDIN.

    特点

    公共网关接口 CGI 程序是存放在 HTTP 服务器上,为用户和HTTP服务器之外的其他应用程序提供互相“交谈”手段的软件,其特点是:
    公共(Common)。无须考虑客户机和服务器所运行的操作系统平台,只要二者的网关程序遵循同一数据传输协议,即可进行数据交互。
    网关(Gateway)。CGI 可被用来作为 HTTP 服务器与其他第三方应用程序之间的“连接件”或“中件(Middle Ware) "。
    接口(Interface)。CGI 使用标准通讯机制,为其它应用程序与 HTTP 服务器提供数据传输接口。用 CGI 可以实现处理表格,数据库查询,发送电子邮件或控制服务器端硬件等许多操作。
    CGI 进程是根据 WWW 服务设置的环境变量和传入参数采取动作并生成相应的响应结果。它返回给 WWW 服务器的信息则采用协议规定的格式(一般为MIME 规定的格式)。绝大多数 Web 服务器支持 CGI。
     
    按照数据通信方式的不同,CGI 可分为标准 CGI 和缓冲 CGI。几乎所有的 Web服务器都支持标准 CGI。按标准 CGI 规范编制的外部程序并依赖于特定的 Web 服务器平台,而按缓冲CGI 规范编制的外部程序则依赖于特定的 Web 服务器平台.

    服务器配置

    CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。
    配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。
    ⑴CERN格式服务器的配置:
    编辑CERN格式服务器(起初其被命名为“CERN httpd”, 也被称为“W3C httpd”)的配置文件(通常为/etc/httpd.conf)在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*.exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如:http://edgar.stern.nyn.***/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启动的)。

    环境变量列表

    SERVER_NAME:运行CGI序为机器名或IP地址。
    SERVER_INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。
    SERVER_PROTOCOL:通信协议,应当是HTTP/1.0。
    SERVER_PORT:TCP端口,一般说来web端口是80。
    HTTP_ACCEPT:HTTP定义的浏览器能够接受的数据类型。
    HTTP_REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量)
    HTTP_USER-AGENT:发送表单的浏览的有关信息。
    GETWAY_INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1。
    PATH_TRANSLATED:PATH_INFO中包含的实际路径名。
    PATH_INFO:浏览器用GET方式发送数据时的附加路径。
    SCRIPT_NAME:CGI程序的路径名。
    QUERY_STRING:表单输入的数据,URL中问号后的内容。
    REMOTE_HOST:发送程序的主机名,不能确定该值。
    REMOTE_ADDR:发送程序的机器的IP地址。
    REMOTE_USER:发送程序的人名。
    CONTENT_TYPE:POST发送,一般为application/xwww-form-urlencoded。
    CONTENT_LENGTH:POST方法输入的数据的字节数。

    优点

    CGI可以为我们提供许多HTML无法做到的功能。比如 a.一个记数器 b.顾客信息表格的提交以及统计 c.搜索程序 d.WEB数据库,用Html是没有办法记住客户的任何信息的,就算用户愿意让你知道。用Html也是无法把信息记录到某一个特定文件里的。要把客户端的信息记录在服务器的硬盘上,就要用到CGI。这是CGI最重要的作用,它补充了Html的不足。是的,仅仅是补充,不是替代。
    使在网络服务器下运行外部分应用程序(或网关)成为可能。CGI-BIN 目录是存放CGI脚本的地方。这些脚本使Web服务器和浏览器能运行外部程序,而无需启动另一个程序。
    它是运行在Web服务器上的一个程序,并由来自于浏览者的输入触发。CGI是在HTTP服务器下运行外部程序(或网关)的一个接口,它能让网络用户访问远程系统上的使用类型程序,就好像他们在实际使用那些远程计算机一样。
    CGI能够让浏览者与服务器进行交互,如果你曾经遇到过在网络上填表或者进行搜索,就很有可能就是用的CGI。
    尽管CGI易于使用,但是当大批人同时使用一个CGI应用程序是会反应较慢,网络服务器 速度也会受到很大 影响。CGI应用程序的优点是可以独立运行。
    CGI应用程序可以由大多数的编程语言编写,如Perl(Practical Extraction and Report Language)、CC++、Java 和Visual Basic等。不过对于那些没有太多编程经验的网页制作人来说,实在是一个不小的难题。
  • 相关阅读:
    Hibernate表中多对多关系的映射
    Servlet JDBC工具类
    访问gridview中的各类控件
    ASP.NET2.0中Gridview中的内容导出到Excel
    List<T> 分页方式,泛型分页方式
    VS保存和编译问题] 总是出现另一个程序正在使用此文件,进程无法访问
    JS实现DIV的增加和移动
    让Editplus调试PHP程序
    与UpdatePanel控件不兼容的控件
    在Powerdesigner中,根据已有字段的Name值替换Code相同的Name的值
  • 原文地址:https://www.cnblogs.com/iBoundary/p/11421566.html
Copyright © 2011-2022 走看看