1
|
The Common Gateway Interface (CGI) is a standard protocol for interfacing external application software with an information server, commonly a web server.
The task of such an information server is to respond to requests (in the case of web servers, requests from client web browsers) by returning output. Each time a request is received, the server analyzes what the request asks for, and returns the appropriate output. The two simplest ways, for the server, of doing this are the following:
CGI defines a standard way of doing the second. It defines how information about the server and the request is passed to the command in the form of arguments and environment variables, and how the command can pass back extra information about the output (such as the type) in the form of headers.
Contents |
Web servers often have a cgi-bin directory at the base of the domain, to hold executable files.
In 1995, the WWW was small but booming. WWW software developers and web site developers kept in touch on the www-talk mailing list, so it was there that a standard for calling command line executables was agreed upon. Specifically mentioned in the CGI spec are the following contributors:
Rob McCool drafted the initial specification, and NCSA still host it. It was swiftly implemented in all servers.
An example of a CGI program is the one implementing a wiki. The user agent requests the name of an entry; the server 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 prompt the user to create it. 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 as defined by the CGI spec, and sent back to the client.
This is a low-tech approach. Calling a command generally means the invocation of a newly created process. Starting up the process will usually take up much more time and memory than the actual work of generating the output, especially when the program still needs to be interpreted or compiled. If the program is called often, the workload can quickly overwhelm web servers.
Several approaches can be adopted for remedying this:
The optimal configuration for any web application will obviously depend on application-specific details, amount of traffic, and complexity of the transaction; a software engineer analyzes these tradeoffs to determine the best implementation for a given task and budget.
| Web server interfaces | |
|---|---|
| General | Common Gateway Interface (CGI) · Simple CGI · FastCGI |
| Technology specific | ISAPI · Java Servlet · NSAPI · AJP · Python WSGI |
| Apache modules | mod_perl · mod_php · mod_python · mod_ruby |
| Standards of the World Wide Web Consortium | |
|---|---|
| Recommendations | CDF · CGI · CSS · DOM · HTML · MathML · OWL · RDF · RDF Schema · SISR · SMIL · SOAP · SRGS · SSML · SVG · Timed Text · VoiceXML · WSDL · XACML · XForms · XHTML · XML · XML Base · XML Events · XML Information Set · XML Schema (W3C) · XML Signature · XPath · XPointer · XQuery · XSL Transformations · XSL-FO · XSL · XLink |
| Notes | XHTML+SMIL · XAdES |
| Working drafts | CCXML · CURIE · InkML · XFrames · XFDL · WICD · XHTML+MathML+SVG |
This article is licensed under the GNU Free Documentation License. It uses material from Wikipedia