Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通俗英语中的WSGI和CGI是什么?_Python_Cgi_Wsgi - Fatal编程技术网

Python 通俗英语中的WSGI和CGI是什么?

Python 通俗英语中的WSGI和CGI是什么?,python,cgi,wsgi,Python,Cgi,Wsgi,每次我读WSGI或CGI,我都会畏缩。我以前试着读过,但没有什么东西真的卡住了 用通俗易懂的英语到底是什么 它是否只是将请求输送到终端并重定向输出?WSGI在web服务器启动时运行Python解释器,作为web服务器进程的一部分(嵌入式模式)或作为单独的进程(守护进程模式),并将脚本加载到其中。每个请求都会导致调用脚本中的特定函数,并将请求环境作为参数传递给该函数 CGI将脚本作为每个请求的单独进程运行,并使用环境变量、stdin和stdout与之“通信”。CGI和WSGI都定义了程序可用于处理

每次我读WSGI或CGI,我都会畏缩。我以前试着读过,但没有什么东西真的卡住了

用通俗易懂的英语到底是什么


它是否只是将请求输送到终端并重定向输出?

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


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

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


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

从完全后退的角度来看,Blankman,这是我关于Web服务器网关接口的“简介页”:

第一部分:WEB服务器

Web服务器提供响应。他们围坐着,耐心地等待着,然后突然没有任何警告:

  • 客户端进程发送一个请求。客户端进程可以是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。。。。问其他人:-)

如果你对这个空间中的所有术语都不清楚,让我们面对它,这是一个令人困惑的首字母缩略词,还有一个很好的背景读物,它的形式是讨论CGI与FastCGI与WSGI等等。我希望我先读一下。

WSGI!=mod_wsgi。您的语言表明您指的是mod_wsgi,它是wsgi的一个实现。WSGI本身只是一个规范,可以以多种不同的方式实现,包括在CGI之上。@Graham:你是说没有其他WSGI容器支持在这些模式下运行WSGI应用程序吗?从技术上讲,可以说有比这两种更微妙的变化,至少在嵌入式系统中,进程是如何启动的,代码是如何激活的。因此,我们必须小心地将事物归纳为这两类。从总体上来说,你可能会说