什么是简单英语的WSGI和CGI?

时间:2011-02-08 04:42:40

标签: python cgi wsgi

每当我读到WSGI或CGI时,我都会感到畏缩。我之前尝试过阅读但没有真正陷入困境。

用简单的英语真的是什么?

它只是将请求传递给终端并重定向输出吗?

4 个答案:

答案 0 :(得分:224)

从完全后退的角度来看,布兰克曼,这是我的“Web服务网关接口的简介页”:

第一部分:网络服务器

Web服务器提供响应。他们坐在那里,耐心地等待,然后一点也没有警告,突然:

  • 客户端进程发送请求。客户端进程可以是Web服务器,机器人,移动应用程序等等。它只是“客户”
  • Web服务器收到此请求
  • 故意咕'发生了各种各样的事情(见下文)
  • Web服务器向客户端发回一些内容
  • 网络服务器再次坐下来

Web服务器(至少是更好的服务器)非常擅长这一点。他们根据需求进行扩大和缩小处理,他们可靠地与最肮脏的客户进行对话,而不是真正的网络,我们从来没有真正担心它。他们只是继续服务。

这是我的观点:网络服务器只是:服务器。他们对内容一无所知,对用户一无所知,事实上除了如何等待和可靠回复之外什么都没有。

您选择的网络服务器应该反映您的投放偏好,而不是您的软件。您的Web服务器应该负责服务,而不是处理或逻辑内容。

第二部分:(PYTHON)软件

软件不会坐下来。软件仅在执行时存在。当涉及到环境中的意外变化(文件不在预期的位置,重命名的参数等)时,软件并不十分容易。虽然优化应该是您设计的核心原则(当然),但软件本身并不优化。开发人员优化。软件执行。软件会在上面的“故意嘟嘟”部分中完成所有内容。可能是什么。

您选择或设计的软件应该反映您的应用程序,您选择的功能,而不是您选择的Web服务器。

这是传统的“编译”语言到Web服务器的方法变得痛苦的地方。您最终会在应用程序中放置代码以应对物理服务器环境,或者至少被迫选择适当的“包装”库以在运行时包含,以便在Web服务器之间产生一致性。

那是什么WSGI?

那么,最后,什么是WSGI? WSGI是一组规则,分为两部分。它们的编写方式使它们可以集成到任何欢迎集成的环境中。

第一部分是为Web服务器端编写的,“好的,如果你想处理一个WSGI应用程序,这就是软件加载时的思考方式。以下是你必须为应用程序提供的东西,这是你可以期望每个应用程序都具有的界面(布局)。此外,如果出现任何问题,这里是应用程序将如何思考以及如何期望它的行为。“

第二部分是为Python应用程序软件编写的,“好的,如果你想处理一个WSGI服务器,这就是服务器在与你联系的时候会怎么想。以下是你必须提供的东西。服务器,这是你可以期望每个服务器都有的接口(布局)。此外,如果出现任何问题,这就是你应该如何表现,这就是你应该告诉服务器的内容。“

所以你有它 - 服务器将是服务器,软件将是软件,这是他们可以相处得很好的方式,而不必为另一方的细节做出任何限制。这是WSGI。

另一方面,

mod_wsgi是Apache的一个插件,它允许它与WSGI兼容的软件进行通信,换句话说,mod_wsgi是一个实现 - 在Apache中 - 第一部分的规则上面的规则手册。

至于CGI ....问别人: - )

答案 1 :(得分:58)

WSGI在Web服务器启动时运行Python解释器,作为Web服务器进程(嵌入模式)的一部分或作为单独的进程(守护进程模式)运行,并将脚本加载到其中。每个请求都会在调用的脚本中生成一个特定的函数,请求环境作为参数传递给函数。

CGI将脚本作为单独的进程运行每个请求,并使用环境变量,stdin和stdout与之“通信”。

答案 2 :(得分:18)

CGI和WSGI都定义了程序可用于处理Web请求的标准接口。 CGI接口的级别低于WSGI,并且涉及服务器设置包含来自HTTP请求的数据的环境变量,程序返回的格式非常类似于裸HTTP服务器响应。

另一方面,WSGI是一个特定于Python的稍高级别的接口,它允许程序员编写与服务器无关且可以包装在其他WSGI应用程序(中间件)中的应用程序。

答案 3 :(得分:18)

如果你不清楚这个领域的所有术语,让我们面对它,这是一个令人困惑的首字母缩略词,还有一个很好的背景阅读器,形式为official python HOWTO,讨论CGI与FastCGI与WSGI等等。我希望我先读它。