Werkzeug究竟是什么?

时间:2016-05-03 13:04:36

标签: python web-services server wsgi

来自official doc说:

  

Werkzeug是Python的WSGI实用程序库。

但是,当我运行Flask Web应用程序时,我注意到在服务器的响应头中,显示

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 13
Server: Werkzeug/0.11.9 Python/2.7.10
Date: Tue, 03 May 2016 12:50:08 GMT

在第四行,它说服务器是Werkzeug

为什么这不意味着Werkzeug是{@ 1}}之类的网络服务器?

5 个答案:

答案 0 :(得分:16)

不,不是

  Werkzeug(WSGI库)就像一个   你的python代码和http nginx / apache服务器之间的沟通者

以下是Werkzeug WSGI的完整用例:

  

WSGI有两个方面:“服务器”或“网关”端(通常是Web服务器)   例如Apache或Nginx),以及“应用程序”或“框架”方面   (Python脚本本身)。处理WSGI请求,服务器端   执行应用程序并提供环境信息和   应用程序端的回调函数。申请流程   请求,使用响应将响应返回给服务器端   它提供的回调函数。

服务器和服务器之间   应用程序,可能有一个WSGI中间件,它实现了两者   API的两面。服务器接收来自客户端的请求   转发它到中间件。处理完毕后,它会发送请求   应用程序。应用程序的响应由转发   中间件到服务器,最终到客户端。可能有   多个中间件构成了一堆符合WSGI的应用程序。

希望有所帮助

答案 1 :(得分:12)

因为它不是。

在您的设置中,最有可能使用“开发服务器”(run_simple函数)进行测试。 所以在这个用例中就像一个(非常)穷人的Apache,但只是在某种意义上说它能够正确回答HTTP请求。

如果您查看文档 http://werkzeug.pocoo.org/docs/serving/ ,你会看到以下注释:

  

开发服务器不适用于生产系统。它专为开发目的而设计,在高负载下性能很差。对于部署设置,请查看“应用程序部署”页面。

答案 2 :(得分:4)

不,它不是像Apache这样的WEB服务器。这是一个CGI库。由于APACHE(或您的FLASK应用程序)可能正在使用该库来处理某些HTTP请求,因此它可能会将该标头添加到响应中。

答案 3 :(得分:4)

Werkzeug主要是一个库,而不是Web服务器,尽管它确实提供了用于开发目的的简单Web服务器。该开发服务器就是提供Server:标头的工具。

要详细了解:

首先,让我们谈谈WSGI。这里有一堆Web服务器,例如Apache,Nginx,Lighttpd等。还有一堆用Python编写的Web框架,例如Django,Flask,Twisted等。如果它们都可以互操作,那将非常方便。那就是WSGI出现的地方。想法是这样的:

  • 响应客户端的HTTP请求涉及两个方面: Web服务器 Web应用程序。服务器处理网络连接的复杂性,接收请求并发送响应。该应用程序获取请求数据,对其进行操作,然后为服务器编制响应以发送回去。

  • 如果要编写Python Web应用程序,请确保它具有一个可调用对象(例如函数),该对象接受HTTP标头,输入表单数据,环境变量等的某些参数。

  • 如果要编写一个提供Python应用程序服务的Web服务器,请使其在每次HTTP请求进入时从应用程序中调用该可调用对象。

  • WSGI规范(在PEP 3333中)明确指定了该可调用对象必须具有的参数以及返回值应当是什么,因此每个服务器都知道如何与每个应用程序通信,反之亦然。 / p>

因此,我们知道每个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>

该服务器不适合生产使用。至少,根据文档,它的伸缩性不好。但是如果还有其他担忧,例如安全性,我也不会感到惊讶。

答案 4 :(得分:-3)

Flask python使用werkzeurg作为网络服务器进行测试