来自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}}之类的网络服务器?
答案 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作为网络服务器进行测试