Common Gateway Interface(CGI)为web servers执行程序,控制台应用程序运行在服务上自动产生web网页(命令行接口程序)提供一种标准协议。这样的程序被称作CGI脚本或简称为CGIs. 脚本被服务怎样执行的描述被服务决定。一般情况下,一个CGI脚本执行一次请求产生HTML. 简言之, CGI程序通过Unix/Linux标准输入接受一个HTTP格式数据,和其他数据(如URL paths, URL arguments, HTTP header data)通过众所周知的unix/linux处理环境变量。
CGI标准的目的
每个web server运行HTTP server软件,响应web browsers的请求。一般,HTTP服务有一个目录,被指派为一个文档集合(这些文件被发给和这些服务连接的web browsers)。 如,如果web server有一个域名example.com,并且这个文档集合被存储在/usr/local/apache/htdocs在本地文件系统,接下来web server 将响应http://example.com/index.html的请求通过发送给浏览器提前写好的文件/usr/local/apache/htdocs/index.html。 对于这些在传送的构造的页面,服务软件可能延迟对分开程序的请求并且延迟对请求客户端的结果(通常,一个web browser 对终端用户展示页面)。web早期,这样的程序常常小并且用一种脚本语言来写,因此她们被称为脚本。
这些程序通常需要一些多余的信息在请求中指定,例如,如果wikipedia用脚本实现,脚本需要做的一件事用户是否登录,如果登录,哪个名下,wikipedia页面顶端的内容依赖于这个信息
HTTP 为browsers提供了向web server传送这种信息的方式,例如,作为URL的一部分。服务软件必须以某种方式传送这种信息给脚本。相反的,在返回时,脚本必须在响应中提供所有信息被HTTP请求的:请求的HTTP状态,文档内容,文档类型(HTML, PDF, plain text), et cetera.
开始,不同服务软件用不同方式交换这些信息用脚本,结果,不可能为不同的服务器软件运行未修改的脚本,即使交换信息是相同的。因此,决定构建一种标准方式为交换这种信息:CGI(定义了一种服务软件和脚本交互接口的方式),web网页产生程序被服务软件调用,并根据CGI标准操作,被称作CGI scripts
这种标准很快适应,并被许多知名server software(Apache, IIS, node.js)所支持。
CGI脚本早期使用时处理process forms, HTML开始,HTML forms有一个典型的 action属性和作为"submit"的按钮,当submit按钮被按下,URI在action属性描述,并发给服务,连同来自form的数据作为一个查询字串传送给服务。如果action指定了一个CGI脚本,CGI脚本将被执行,并产生一个HTML网页