WSGI(Web服务器网关接口 Web Server Gateway Interface )Web应用程序和Web服务器之间的通用接口标准、Flask框架默认WSGI:Werkzeug

174 篇文章 24 订阅
9 篇文章 0 订阅

WSGI

WSGI(Web Server Gateway Interface)是一种Python Web应用程序和Web服务器之间的通用接口标准。它定义了Web服务器如何与Python应用程序进行通信,以便能够处理HTTP请求和响应。

作用

WSGI的设计目标是将Web服务器与应用程序解耦,使得开发人员可以使用不同的Web服务器和框架来开发和部署Python Web应用程序。通过遵循WSGI标准,开发人员可以编写可移植的Web应用程序,无需关心底层的Web服务器实现细节。

例如,今天您决定使用 Gunicorn 部署应用程序,但几年后您决定从 Gunicorn 切换到 mod_wsgi。现在,在这种情况下,您可以轻松切换到 mod_wsgi,而无需对实现 WSGI 的应用程序或框架进行任何更改。因此,WSGI 为您的应用程序提供了灵活性。
使用 WSGI 的另一个原因是它的可扩展性。一旦您的应用程序上线、启动并运行,您的应用程序中可能会出现数千个请求。因此,WSGI 能够一次处理数千个请求。众所周知,WSGI 服务器负责处理来自 Web 服务器的请求,并决定将这些请求与应用程序框架的进程进行通信。在这里,我们可以在服务器之间划分职责以扩展网络流量。
参考文章:什么是 WSGI(Web 服务器网关接口)?

工作原理

WSGI的工作原理是,Web服务器接收到HTTP请求后,将请求信息封装成一个字典对象,然后调用WSGI应用程序提供的一个可调用对象(通常是一个函数或类的实例),将请求信息作为参数传递给该可调用对象。应用程序处理请求并生成响应,然后将响应信息返回给Web服务器。(另一说法是应用程序返回响应信息的时候,也要先经过WSGI处理)

在这里插入图片描述

https://dev.to/dev0928/how-to-deploy-python-flask-web-applications-4mh7

在这里插入图片描述
https://medium.com/analytics-vidhya/what-is-wsgi-web-server-gateway-interface-ed2d290449e

优点

WSGI的优点包括灵活性、可移植性和可扩展性。它可以与各种Web服务器和框架配合使用,如Apache、Nginx、Gunicorn、uWSGI等,同时也可以方便地开发自定义的中间件来实现额外的功能。

Flask框架默认的WSGI:Werkzeug

Flask是一个基于Python的轻量级Web框架,它使用了Werkzeug作为底层的WSGI工具库。Werkzeug是一个WSGI工具库,提供了处理HTTP请求和响应的功能,它是Flask框架的核心组件之一。

在Flask中,Werkzeug提供了处理HTTP请求和响应的功能,包括路由、请求上下文、会话管理等。Flask框架则在此基础上提供了更高级的功能,如模板引擎、表单处理、数据库集成等,使得开发Web应用程序更加方便和高效。

因此,可以说Flask是基于Werkzeug的,而Werkzeug是基于WSGI的。Flask使用Werkzeug来处理HTTP请求和响应,而Werkzeug则遵循WSGI规范与Web服务器(如nginx服务器)进行通信。这种层次化的关系使得Flask能够灵活地与不同的Web服务器和框架进行集成和扩展。

注意:如果Flask直连浏览器,那么Flask本身便充当了web服务器的功能,此时,并未用到WSGI

在Flask直接连接浏览器的情况下,不需要使用WSGI(Web Server Gateway Interface)。WSGI是一种规范,定义了Web服务器和Web应用程序之间的通信接口。它允许不同的Web服务器和Web应用程序框架进行交互。

当Flask直接连接浏览器时,Flask充当了Web服务器的角色,并且直接处理HTTP请求和响应。在这种情况下,Flask不需要与其他Web服务器进行通信,因此不需要使用WSGI。

然而,当Flask应用程序部署到生产环境时,通常会使用WSGI服务器来处理请求。WSGI服务器可以与Flask应用程序进行交互,并将来自Web服务器的请求转发给应用程序进行处理。在这种情况下,Flask应用程序将作为WSGI应用程序运行,而不是直接连接到浏览器。常见的WSGI服务器包括Werkzeug、Gunicorn、uWSGI和mod_wsgi等。

为什么flask与web服务器交互需要wsgi,flask与浏览器直连,就不需要了?

Flask与Web服务器交互需要WSGI的原因是为了实现Web应用程序与Web服务器之间的解耦。WSGI(Web Server Gateway Interface)是一种规范,定义了Web服务器和Web应用程序之间的通信接口。它允许不同的Web服务器和Web应用程序框架进行交互。

当Flask应用程序直接连接浏览器时,Flask充当了Web服务器的角色,并直接处理HTTP请求和响应。在这种情况下,Flask不需要与其他Web服务器进行通信,因此不需要使用WSGI。

然而,当Flask应用程序部署到生产环境时,通常会使用WSGI服务器来处理请求。WSGI服务器可以与Flask应用程序进行交互,并将请求转发给应用程序进行处理。这种架构的好处是可以实现解耦,使得Web应用程序与具体的Web服务器无关,可以在不同的服务器上部署和扩展。

因此,当Flask应用程序直接连接浏览器时,不需要使用WSGI。但当Flask应用程序与Web服务器交互时,需要使用WSGI来实现通信和解耦。

支持WSGI的服务有很多,Werkzeug只是其中一种,具体可以参考这里

Servers which support WSGI

在这里插入图片描述

在这里插入图片描述

参考文章

参考文章:https://medium.com/analytics-vidhya/what-is-wsgi-web-server-gateway-interface-ed2d290449e

拓展:有哪些常见的web服务器(web server)?

以下是一些常见的Web服务器:

  1. Apache HTTP Server:Apache是最流行的开源Web服务器之一,具有广泛的功能和可扩展性。

  2. Nginx:Nginx是一个高性能的开源Web服务器,以其轻量级和高并发处理能力而闻名。

  3. Microsoft IIS:Internet Information Services(IIS)是微软的Web服务器,主要用于Windows操作系统。

  4. Lighttpd:Lighttpd是一个轻量级的Web服务器,特别适用于高并发和低资源消耗的场景。

  5. Caddy:Caddy是一个现代化的Web服务器,具有自动HTTPS配置和易用性等特点。

  6. Gunicorn:Gunicorn(绿色独角兽)是一个基于Python的WSGI HTTP服务器,常用于部署Python Web应用程序。

  7. uWSGI:uWSGI是一个高性能的Web服务器和应用服务器,支持多种编程语言和协议。

这是一些常见的Web服务器,还有其他许多可选的服务器,每个服务器都有其特定的特点和适用场景。选择适合自己需求的Web服务器需要考虑性能、可靠性、安全性和扩展性等因素。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值