FastCGI is a
binary protocol
A communication protocol is a system of rules that allows two or more entities of a communications system to transmit information via any variation of a physical quantity. The protocol defines the rules, syntax, semantics, and synchronization of ...
for interfacing interactive programs with a
web server
A web server is computer software and underlying Computer hardware, hardware that accepts requests via Hypertext Transfer Protocol, HTTP (the network protocol created to distribute web content) or its secure variant HTTPS. A user agent, co ...
. It is a variation on the earlier
Common Gateway Interface
file:Common Gateway Interface logo.svg, The official CGI logo from the spec announcement
In computing, Common Gateway Interface (CGI) is an interface specification that enables web servers to execute an external program to process HTTP or HTTPS ...
(CGI). FastCGI's main aim is to reduce the overhead related to interfacing between web server and CGI programs, allowing a server to handle more web page requests per unit of time.
History
Common Gateway Interface
file:Common Gateway Interface logo.svg, The official CGI logo from the spec announcement
In computing, Common Gateway Interface (CGI) is an interface specification that enables web servers to execute an external program to process HTTP or HTTPS ...
(CGI) is an interface specification allowing external applications to interact with web servers. CGI applications run in separate
processes, which are created at the start of each request and torn down at the end. This "one new process per request" model makes CGI programs very simple to implement, but limits efficiency and scalability. At high loads, the
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
overhead for process creation and destruction becomes significant. Also, the CGI process model limits resource reuse methods, such as reusing database connections, in-memory caching, etc.
To address the scalability shortcomings of CGI,
Open Market
The term open market is used generally to refer to an economic situation close to free trade. In a more specific, technical sense, the term refers to interbank trade in securities.
In economic theory
Economists judge the "openness" of markets a ...
developed FastCGI and first introduced it in their webserver product in the mid-1990s. Open Market originally developed FastCGI in part as a competitive response to
Netscape
Netscape Communications Corporation (originally Mosaic Communications Corporation) was an American independent computer services company with headquarters in Mountain View, California, and then Dulles, Virginia. Its Netscape web browser was o ...
's proprietary, in-process
application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
s (APIs) (
Netscape Server Application Programming Interface (NSAPI)) for developing Web applications.
While developed first by Open Market, FastCGI was then implemented by several other webserver makers. However, its approach competed against other methods to speed and simplify server-subprogram communication.
Apache HTTP Server
The Apache HTTP Server ( ) is a free and open-source software, free and open-source cross-platform web server, released under the terms of Apache License, Apache License 2.0. It is developed and maintained by a community of developers under the ...
modules such as
mod_perl and
mod_php appeared around the same time, and gained popularity quickly. , all of these various methods, including CGI, remain in common use.
Implementation details
Instead of creating a new process for each request, FastCGI uses persistent processes to handle a series of requests. These processes are owned by the FastCGI server, not the web server.
To service an incoming request, the web server sends
environment variable
An environment variable is a user-definable value that can affect the way running processes will behave on a computer. Environment variables are part of the environment in which a process runs. For example, a running process can query the va ...
information and the page request to a FastCGI process over either a
Unix domain socket
A Unix domain socket (UDS), a.k.a. local socket, a.k.a. inter-process communication (IPC) socket, is a communication endpoint for exchanging data between processes executing in the same Unix or Unix-like operating system.
The name, ''Unix domain ...
, a
named pipe, or a
Transmission Control Protocol
The Transmission Control Protocol (TCP) is one of the main communications protocol, protocols of the Internet protocol suite. It originated in the initial network implementation in which it complemented the Internet Protocol (IP). Therefore, th ...
(TCP) connection. Responses are returned from the process to the web server over the same connection, and the web server then delivers that response to the
end user
In product development, an end user (sometimes end-user) is a person who ultimately uses or is intended to ultimately use a product. The end user stands in contrast to users who support or maintain the product, such as sysops, system administrato ...
. The connection may be closed at the end of a response, but both web server and FastCGI service processes persist.
Each individual FastCGI process can handle many requests over its lifetime, thereby avoiding the overhead of per-request process creation and termination. Processing multiple requests concurrently can be done in several ways: by using one connection with internal
multiplexing
In telecommunications and computer networking, multiplexing (sometimes contracted to muxing) is a method by which multiple analog or digital signals are combined into one signal over a shared medium. The aim is to share a scarce resource� ...
(i.e., multiple requests over one connection); by using multiple connections; or by a mix of these methods. Multiple FastCGI servers can be configured, increasing stability and scalability.
Web site administrators and programmers can find that separating web applications from the web server in FastCGI has many advantages over embedded interpreters (
mod_perl,
mod_php, etc.). This separation allows server and application processes to be restarted independently – an important consideration for busy web sites. It also enables the implementation of per-application, hosting service security policies, which is an important requirement for ISPs and web hosting companies.
Different types of incoming requests can be distributed to specific FastCGI servers which have been equipped to handle those types of requests efficiently.
Web servers that implement FastCGI
:''Note: unless stated, completeness of FastCGI implementation is unknown''
*
Apache HTTP Server
The Apache HTTP Server ( ) is a free and open-source software, free and open-source cross-platform web server, released under the terms of Apache License, Apache License 2.0. It is developed and maintained by a community of developers under the ...
''(partial)''
** Implemented by . This module used to be third-party, but was granted to
The Apache Software Foundation
The Apache Software Foundation ( ; ASF) is an American nonprofit corporation (classified as a 501(c)(3) organization in the United States) to support a number of open-source software projects. The ASF was formed from a group of developers of the A ...
(ASF) as an Apache Server subproject in 2009, shepherded by Chris Darroch. It only supports Unix domain sockets, no TCP sockets.
** A third-party module is also being used. For a while, this module no longer compiled properly under Apache 2.4.x, although that problem has been solved with a fork of the original project.
** Multiplexing of requests through one connection is prohibited by Apache 1.x design, so this isn't supported
** In Apache 2.4, was added, supporting TCP FastCGI servers.
*
Caddy
*
Cherokee
The Cherokee (; , or ) people are one of the Indigenous peoples of the Southeastern Woodlands of the United States. Prior to the 18th century, they were concentrated in their homelands, in towns along river valleys of what is now southwestern ...
*
Hiawatha
Hiawatha ( , also : ), also known as Ayenwatha or Aiionwatha, was a precolonial Native American leader and cofounder of the Iroquois Confederacy. He was a leader of the Onondaga people, the Mohawk people, or both. According to some accounts, he ...
** Loadbalancing FastCGI support
** Supports chrooted FastCGI servers
*
Jetty
A jetty is a man-made structure that protrudes from land out into water. A jetty may serve as a breakwater (structure), breakwater, as a walkway, or both; or, in pairs, as a means of constricting a channel. The term derives from the French la ...
*
Kerio WebSTAR
*
Lighttpd
lighttpd (prescribed pronunciation: "lighty") is an open-source web server optimized for speed-critical environments while remaining standards-compliant, secure and flexible. It was originally written by Jan Kneschke as a proof-of-concept of the ...
*
LiteSpeed Web Server
*
Microsoft IIS
Microsoft IIS (Internet Information Services, IIS, 2S) is an extensible web server created by Microsoft for use with the Windows NT family. IIS supports HTTP, HTTP/2, HTTP/3, HTTPS, FTP, FTPS, SMTP and NNTP. It has been an integral part of th ...
*
Nginx
(pronounced "engine x" , stylized as NGINX or nginx) is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. The software was created by Russian developer Igor Sysoev and publicly released in 20 ...
*
NaviServer
*
Oracle iPlanet Web Server
An oracle is a person or thing considered to provide insight, wise counsel or prophetic predictions, most notably including precognition of the future, inspired by deities. If done through occultic means, it is a form of divination.
Descript ...
*
OpenBSD
OpenBSD is a security-focused operating system, security-focused, free software, Unix-like operating system based on the Berkeley Software Distribution (BSD). Theo de Raadt created OpenBSD in 1995 by fork (software development), forking NetBSD ...
's
*
Open Market
The term open market is used generally to refer to an economic situation close to free trade. In a more specific, technical sense, the term refers to interbank trade in securities.
In economic theory
Economists judge the "openness" of markets a ...
web server
*
Resin
A resin is a solid or highly viscous liquid that can be converted into a polymer. Resins may be biological or synthetic in origin, but are typically harvested from plants. Resins are mixtures of organic compounds, predominantly terpenes. Commo ...
web and application server
*
Roxen web server
*
ShimmerCat web server
*
Zeus Web Server
Language bindings for its API
FastCGI can be implemented in any language that supports
network socket
A network socket is a software structure within a network node of a computer network that serves as an endpoint for sending and receiving data across the network. The structure and properties of a socket are defined by an application programming ...
s. Since "FastCGI is a protocol, not an implementation," it is not tightly bound to any one language.
Application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
s (APIs) exist for:
Application Libraries, Development Kits
/ref>
Recent frameworks such as Ruby on Rails
Ruby on Rails (simplified as Rails) is a server-side web application framework written in Ruby under the MIT License. Rails is a model–view–controller (MVC) framework, providing default structures for a database, a web service, and web pa ...
, Catalyst
Catalysis () is the increase in rate of a chemical reaction due to an added substance known as a catalyst (). Catalysts are not consumed by the reaction and remain unchanged after it. If the reaction is rapid and the catalyst recycles quick ...
, Django, Kepler and Plack allow use with either the embedded interpreters ( mod_ruby, mod_perl, mod_python or mod_lua, for example), or FastCGI.
References
External links
* — fork/mirror of down FastCGI website
**
* — Old FastCGI home page, as it appeared when working
* Implementations
** — Implementation for Apache httpd
** — Implementation for Microsoft IIS
** — Experimental implementation for Apache 2.x mod_proxy
{{DEFAULTSORT:Fastcgi
Web technology