了解Rails中的CGI / FastCGI

3

这是更深入了解Web应用程序中请求-响应机制的内容。客户端向Web应用程序发送请求(GET / POST)。Web应用程序有一个运行的应用程序服务器,作为应用程序特定程序的容器。当应用程序服务器启动FastCGI / CGI进程时,我不理解其中的部分。CGI的意义是什么?难道服务器不能处理完整的请求处理机制吗?请求处理的哪个部分依赖于CGI?

2个回答

1

我在这里问了一个类似的问题(尽管更接近于实现而不是概念): 从Web服务器到CGI/FastCGI进程的HTTP请求分发

然而,在这个过程中,我学到了一些东西: CGI是一组“标准”,定义了HTTP/Web服务器与外部程序之间的通信方式。注意这个词“标准”!虽然它不是一个完全的协议(像HTTP、TCP等),但它非常接近一个协议,因为大多数生成HTML的外部程序都遵循这组标准(如Ruby、PHP、Python等)。

你可以在这里阅读更多关于CGI的信息: http://hoohoo.ncsa.illinois.edu/cgi/intro.html

以及这里: http://www.w3.org/CGI/

FastCGI是对处理CGI进程的一种改进 - 简单来说,FastCGI进程会在内存中保持加载更长时间,以便在其加载期间处理多个请求。显然,这样做更有效率,因为在FastCGI进程中很少发生基本的CGI环境加载所浪费的时间和资源。

虽然与题目不完全相关且专注于Rails,但这是一篇有趣的文章: http://izumi.plan99.net/blog/index.php/2007/04/05/saving-memory-in-ruby-on-rails/


0
客户端(通常是浏览器)和Web服务器之间的通信是通过http完成的。 当Web服务器接收到请求时,它会分析该请求所要求的内容,并返回适当的输出。请求可以针对存储在磁盘上的文件,那么服务器只返回文件的内容。如果请求识别出一个程序(您的CGI),它将执行该程序并将程序的输出返回给客户端。

谢谢Dani。让我在这里更具体一些。假设我正在提供一个Rails应用程序。客户端请求资源,这是我的程序的特定部分(通常是控制器对象的消息)。CGI在这里的作用是什么?应用服务器(如Mongrel)不应该能够运行程序并将响应返回给客户端吗? - Vaibhav Gumashta
如果您正在使用Mongrel,则不会使用CGI。 - Quentin
1
没错!CGI 是指 Web 服务器执行“控制台应用程序”的术语。CGI 是 Web 服务器与控制台应用程序之间的通信。使用 Mongrel,您的应用程序将在 Web 服务器“内部”运行。 - Dani Cricco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接