**快速通用网关接口**（**Fast** **C**ommon **G**ateway **I**nterface／**FastCGI**）是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口（CGI）的增強版本。

FastCGI致力於減少網頁伺服器與CGI程式之間互動的開銷，從而使伺服器可以同時處理更多的網頁請求。

歷史
--

通用网关接口协议（CGI）是一种对接应用程序和网络服务器的接口协议。CGI使外部程式與Web伺服器之間交互成為可能。CGI程式運行在獨立的進程中，並對每個Web請求建立一個進程，這種方法非常容易實現，但效率较差，難以擴展。

CGI程式運行在獨立的進程中，並對每個Web請求建立一個進程，在结束时销毁。这种"每个请求一个新进程"的模型使得CGI程序非常容易實現，但效率较差，難以擴展。在高负载情况下，进程创建和销毁进程的开销变得很大。此外，由於地址空間無法共享，CGI进程模型限制了资源重用方法，如重用数据库连接、内存缓存等。

为了解决CGI的可伸缩性缺点，Open Market（英语：）开发了FastCGI，并在20世纪90年代中期首次在他们的网络服务器产品中引入了它。Open Market最初开发FastCGI的部分原因是作为对网景公司开发网络应用程序的专有、进程内API(网景服务器API)的竞争回应。

虽然FastCGI最初是由Open Market开发的，但后来被其他几家网络服务器制造商实施。然而，它的方法与其他加速和简化服务器-子程序通信的方法相竞争。像mod\_perl和mod\_php这样的Apache HTTP服务器模块几乎是同时出现的，并且很快流行起来。截至2019年，包括CGI在内的所有这些不同方法仍在普遍使用。

實現
--

与为每个请求创建一个新的进程不同，FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI服务器管理，而不是web服务器。

当进来一个请求时，web服务器把环境变量和这个页面请求通过一个socket比如FastCGI进程与web服务器（都位于本地）或者一个TCP 请求（FastCGI进程在远端的server farm）传递给FastCGI进程。

服务传入请求时，网络服务器通过Unix域套接字、命名管道或TCP连接向FastCGI进程发送环境变量信息和页面请求。响应通过相同的连接从进程返回到网络服务器，然后网络服务器将该响应传递给最终用户。连接可能在响应结束时关闭，但是web服务器和FastCGI服务进程都将持续，不会被销毁。

每个单独的FastCGI进程在其生命周期内可以处理许多请求，从而避免了每个请求进程创建和终止的开销。并发处理多个请求可以通过几种方式来完成:通过内部多路复用使用一个连接(即一个连接上的多个请求)；通过使用多个连接；或者通过这些方法的混合。可以配置多个FastCGI服务器，提高稳定性和可扩展性。

优点
--

网站管理员和程序员可以发现，在FastCGI中将网络应用程序与网络服务器分离比嵌入式解释器(mod\_perl、mod\_php等)有许多优点。这种分离允许服务器和应用程序进程独立重启——这是繁忙网站的一个重要考虑因素。它还能够实现每个应用程序的托管服务安全策略，这是对ISPs和网络托管公司的一个重要要求。不同类型的传入请求可以分发到特定的FastCGI服务器，这些服务器已被配置为高效地处理这些类型的请求。

FastCGI的網頁伺服器
-------------

* Apache HTTP Server *(部分)*
	+ 通過`mod\_fcgid`模塊實現。這個模塊曾屬於第三方，但是在2009年被授予ASF，成為Apache的一個子項目。它只支持Unix域套接字，不支持TCP套接字。
	+ 一個較早的第三方模塊 `mod_fastcgi` 。但是这个模块从Apache 2.4.x 开始就不再被一同编译了。 虽然这个模块相关的bug早就被解决了。
	+ Apache 1.x 在设计上禁止多路复用单个连接接收请求，因此Aapache 1.x是不支持的。
	+ 在 Aapache 2.4 中，添加了新的`mod\_proxy\_fcgi`模块，支持TCP FastCGI服务器。
* Caddy
* Cherokee HTTP Server
* Hiawatha Webserver（英语：）
	+ 支持FastCGI的負載平衡
	+ 支持chrooted FastCGI 伺服器
* Lighttpd
* Nginx
* LiteSpeed Web Server
* Microsoft IIS
* Jetty
* Kerio WebSTAR
* OpenBSD 的 `httpd(8)`
* Open Market 网络服务器

参见
--

* CGI
* IIS
* nginx

参考资料
----

1. 1 2 . Open Market, Inc. 1996  [2020-03-24]. （原始内容存档于2016-01-19）.  `|url-status=`和`|dead-url=`只需其一 (帮助)
2. ↑ . Open Market, Inc. 1996  [2020-03-24]. （原始内容存档于2010-10-01）.  `|url-status=`和`|dead-url=`只需其一 (帮助)
3. ↑  Heinlein, Paul.. Linux Journal. 1 November 1998  [4 October 2010]. （原始内容存档于2020-03-24）.
4. ↑ .  [2020-03-24]. （原始内容存档于2020-03-28）.
5. ↑ .  [2020-03-24]. （原始内容存档于2020-05-28）.
6. ↑ .  [2012-03-27]. （原始内容存档于2012-03-27）.
7. ↑ .  [2020-03-24]. （原始内容存档于2020-05-28）.
8. ↑ .  [2006-02-21]. （原始内容存档于2010-02-08）.
9. ↑ .  [2020-03-24]. （原始内容存档于2019-07-01）.
10. ↑ .  [2020-03-24]. （原始内容存档于2008-12-05）.
11. ↑ . FastCGI for IIS. Microsoft. 2008-02-28  [2008-02-29]. （原始内容存档于2007-11-14）.
12. ↑ .  [2020-03-24]. （原始内容存档于2020-03-24）.
13. ↑ .  [2020-03-24]. （原始内容存档于2020-05-28）.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
網頁技術與標準 |
| --- |
|  |
| 文档呈现语言 | 
* HTML\*（HTML5\*）
* XHTML\*
* XML\*
* XForms\*
* DHTML

 |
|  |
| 样式格式描述语言 | 
* CSS\*
* XSL\*

 |
|  |
| 动态网页技术 | 
* CGI
* FastCGI
* ASP
* ASP.NET
* ColdFusion
* JSP
* Perl（PSGI）
* Python（WSGI）
* Ruby
* Smalltalk
* PHP

 |
|  |
| 用戶端互動技术 | 
* ActiveX
* Java Applet
* JavaFX
* AJAX（XMLHTTP\*）
* WebSocket\*
* Silverlight
* ActionScript（Flash
* Flex
* AIR）
* Asm.js
* NaCl
* WebAssembly\*

 |
|  |
| 用戶端手稿語言 | 
* ECMAScript（JavaScript，JScript）
* VBScript

 |
|  |
| 标识定位语言 | 
* URL
* URI
* XPath
* URL重寫

 |
|  |
| 文档纲要语言 | 
* DTD\*
* XML Schema\*

 |
|  |
| \* 代表由W3C制定和维护的标准与规范 |

 |