Werkzeug主要是一个库,而不是Web服务器,尽管它确实提供了用于开发目的的简单Web服务器。开发服务器就是提供该Server:
标头的工具。
要更详细地说明:
首先,让我们谈谈WSGI。那里有很多Web服务器,例如Apache,Nginx,Lighttpd等。也有很多用Python编写的Web框架,例如Django,Flask,Tornado,Pyramid等。全部互通。这就是WSGI出现的地方。想法是这样的:
响应客户端的HTTP请求涉及两个方面:Web服务器和Web应用程序。服务器处理网络连接的复杂性,接收请求并发送响应。应用程序获取请求数据,对其进行操作,然后为服务器编制响应以发送回去。
如果要编写Python Web应用程序,请确保其具有可调用对象(例如函数),该对象接受HTTP标头,输入表单数据,环境变量等的某些参数。
如果要编写一个提供Python应用程序服务的Web服务器,请使其在每次HTTP请求进入时从应用程序中调用该可调用对象。
WSGI规范(在PEP 3333中)确切指定了该可调用参数必须是什么,返回值应该是什么,因此每个服务器都知道如何与每个应用程序通信,反之亦然。
因此,我们知道每个Web应用程序都需要提供此可调用项并能够处理其接收的特定参数。每个应用程序都需要执行此操作...这听起来像是使用库的好机会。Werkzeug是这个图书馆。
Werkzeug提供了许多实用程序来开发与WSGI兼容的应用程序。这些实用程序执行的工作包括解析标头,发送和接收Cookie,提供对表单数据的访问,生成重定向,在出现异常时生成错误页面,甚至提供在浏览器中运行的交互式调试器。真的很全面。然后Flask在此基础(以及Jinja,Click等)的基础上提供完整的Web框架。
因此,如果Werkzeug是应用程序库,为什么它会显示在服务器头中?
Werkzeug的确有一个服务器角色模块。这纯粹是为了方便起见。
安装和配置功能完善的Web服务器(例如Apache或Nginx)需要付出很多努力,并且几乎可以肯定,仅在您自己的开发箱上测试您的应用程序就显得过头了。因此,Werkzeug提供了一个开发服务器:一个简单的Web服务器,您只需一个命令即可运行,几乎不需要配置。当您flask run
(或werkzeug.serving.run_simple()
)执行此操作时,您将获得此开发服务器。Server:
您猜到了,开发服务器的标头是Werkzeug/<version> Python/<version>
。
该服务器不适合生产使用。至少,根据文档,它的伸缩性不好。但是,如果还有其他顾虑,例如安全性,我也不会感到惊讶。
Server:
行。