Common Gateway Interface
|
Common Gateway Interface (CGI) is an important World Wide Web technology that enables a client web browser to request data from a program executed on the Web server. CGI specifies a standard for passing data between the client and the program.
Originally, CGI was invented by NCSA for the NCSA HTTPd web server in 1993. This web server used UNIX shell environment variables to store parameters passed from the web server execution environment before spawning the CGI program as a separate process.
The programming language Perl is well known as a language used for CGI, but one of the points of CGI is to be language-neutral. The Web server does not need to know anything about the language in question. If fact, CGI programs can be written in any scripting language or a full-fledged programming language, as long as that language can be executed on the system. Besides Perl, examples include Unix shell scripts, Python, Ruby, PHP, Tcl, C/C++, and Visual Basic.
An example of a CGI program is the one implementing a wiki: you hand it the name of an entry, and it will retrieve the source of that entry's page (if one exists), transform it into HTML, and send the result back to the browser. Or tell it that you want to edit a page. All wiki operations are managed by this one program.
The way CGI works from the Web server's point of view is that certain locations (e.g. http://www.example.com/wiki.cgi) are defined to be served by a CGI program. Whenever a request to a matching URL is received, the corresponding program is called, with any data that the client sent as input. Output from the program is collected by the Web server, augmented with appropriate headers, and sent back to the client.
Because this technology generally requires a fresh copy of the program to be executed for every CGI request, the workload could quickly overwhelm web servers, inspiring more efficient technologies such as mod_perl that allow script interpreters to be integrated directly into web servers as modules, thus avoiding the overhead of repeatedly loading and initializing language interpreters.
Workarounds
The overhead of spawning new processes to compile the server code can be easily handled if the code is occasionally changed. One example is FastCGI while others include programming accelerators that take a web script when initially called and store a compiled version of the script in system location so that further requests for the file are automatically directed to the compiled code instead of invoking the script interpreter every time the script is called. When scripts are changed the temporary accelerator cache can be emptied to ensure that the new script is called instead of the old one.
Another approach is to embed the interpreter directly into the web server so that it can be executed without creating a new process. The Apache web server has a number of modules such as mod_perl, mod_php, mod_python, and mod_mono which do this.
See also
External links
- The CGI/1.1 specification (http://hoohoo.ncsa.uiuc.edu/cgi/).
- The complete list of CGI variables is at http://hoohoo.ncsa.uiuc.edu/cgi/env.html.
- The SCGI (http://www.mems-exchange.org/software/scgi/) protocol is a replacement for the Common Gateway Interface (CGI) protocol.
da:CGI de:Common Gateway Interface et:CGI eo:CGI es:CGI fr:Common Gateway Interface he:CGI it:Common Gateway Interface lt:CGI nl:Common Gateway Interface ja:Common Gateway Interface pl:CGI sl:CGI sv:CGI