jin*_*lei 42 wsgi werkzeug flask server
从官方文件说:
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
Run Code Online (Sandbox Code Playgroud)
在第四行它说服务器是Werkzeug.
为什么这不是Werkzeug一个像Web服务器那样的意思Apache?
Nic*_*ick 33
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>。
该服务器不适合生产使用。至少,根据文档,它的伸缩性不好。但是如果还有其他顾虑,例如安全性,我也不会感到惊讶。
Muh*_*man 24
不,不是
Werkzeug(WSGI库)就像你的python代码和http nginx/apache服务器之间的沟通者
以下是Werkzeug WSGI的完整用例:
WSGI有两个方面:"服务器"或"网关"端(通常是Web服务器,如Apache或Nginx),以及"应用程序"或"框架"端(Python脚本本身).为了处理WSGI请求,服务器端执行应用程序并向应用程序端提供环境信息和回调函数.应用程序处理请求,使用提供的回调函数将响应返回给服务器端.
在服务器和应用程序之间,可能存在WSGI中间件,它实现API的两面.服务器从客户端接收请求并将其转发到中间件.处理完成后,它会向应用程序发送请求.应用程序的响应由中间件转发到服务器,最终转发给客户端.可能有多个中间件形成一堆符合WSGI的应用程序.
希望能帮助到你
seb*_*ian 12
因为事实并非如此.
在您的设置中,您最有可能使用"开发服务器"(该run_simple功能)进行测试.所以它在这个用例中就像一个(非常)穷人Apache,但只是在某种意义上说它能够正确回答HTTP请求.
如果您查看文档 http://werkzeug.pocoo.org/docs/serving/ ,您会看到以下注释:
开发服务器不适用于生产系统.它专为开发目的而设计,在高负载下性能很差.对于部署设置,请查看"应用程序部署"页面.
不,它不是像Apache这样的Web服务器。这是一个CGI库。由于Apache(或您的Flask应用程序)可能正在使用该库来处理一些HTTP请求,因此它可能会将标头添加到响应中。
| 归档时间: |
|
| 查看次数: |
29244 次 |
| 最近记录: |