全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

WSGI到底是什么?

来源:千锋教育
发布人:xqq
2023-10-19

推荐

在线提问>>

一、WSGI概念

WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。WSGI一开始是在PEP-0333中定义的,最新版本是在Python的PEP-3333定义的。

二、WSGI协议

WSGI协议主要分为Server(服务器)和Application(应用程序)两部分:

Server(服务器):Server一般指Web服务器,通过解析HTTP请求并将其转发给WSGI服务端(即Application),然后将WSGI服务端返回的响应发送给客户端(如浏览器)。Application(应用程序):接收从WSGI服务器发送的请求,处理请求,并将处理后的响应结果返回给服务器。

其中,Application(应用程序)是一个可调用的对象,通常是一个函数或类的实例,该对象接收两个参数:

environ:一个字典,包含Web服务器传递给应用程序的CGI变量和其他与请求相关的数据。这些数据可以被应用程序用于判断请求的内容、处理请求,并生成响应。start_response:一个回调函数,用于发送HTTP响应头信息。它需要两个参数:HTTP状态码和HTTP响应头信息列表。当应用程序调用start_response时,它会返回一个可迭代的对象,该对象包含了客户端会收到的所有的HTTP响应体内容。

Application(应用程序)的最后一个返回值必须是一个iterable,包含单个或多个bytestring。在Wsgi服务端迭代这个iterable时,获得的结果会作为HTTP响应体的一部分,被发送回Web服务器并最终传输到客户端(如浏览器)。

三、WSGI流程

用户(浏览器)发起请求,Web服务器接收HTTP请求,并将解析后的请求转发给WSGI服务端。WSGI服务端收到请求后立即调用WSGI应用端的application对象,并将生成的environ与事先定义好的start_response传给该对象。application对象会解析environ,根据其中的URI调用应用服务中对应的处理方法。处理完成后,application对象会先调用start_response开启响应,再将应用服务方法的响应内容迭代返回给WSGI服务端。最后,WSGI服务端将响应发送给Web服务器,再由Web服务器返回给用户(浏览器)。

四、支持WSGI的Web应用框架

BlueBreamboboBottleCherryPyDjangoFlaskGoogle App Engine’s webapp2GunicornprestansPylonsPyramidrestliteTornadoTracTurboGearsUliwebweb.pyweb2pyweblayerWerkzeug

五、WSGI前景

WSGI的前景是可持续的,WSGI协议提供了一个标准接口,以便Python Web应用能够在各种Web服务器上运行。这使得Python Web应用程序的移植性更好并且更易于开发。 这个协议广泛应用于Python Web框架,例如Django,Flask等等。此外,由于Python语言的简洁性、易读性和易学性,越来越多的Python Web开发人员将其用作优选编程语言。因此,WSGI协议未来在Python Web开发领域将继续扮演重要的角色。

另外,WSGI的一些扩展和升级也在逐渐推进中,比如ASGI(异步服务器网关接口)将支持异步Python Web应用程序,提高Web服务器的并发处理能力。因此,WSGI在未来也会与新的技术和需求保持同步,并继续为Python Web开发者提供良好的开发体验。

延伸阅读1:WSGI规范中要求environ包含的下列成员

wsgi.version:表示WSGI版本,一个元组(1, 0),表示版本1.0wsgi.url_scheme:http或者httpswsgi.input:一个类文件的输入流,application可以通过这个获取HTTP request bodywsgi.errors:一个输出流,当应用程序出错时,可以将错误信息写入这里wsgi.multithread:当application对象可能被多个线程同时调用时,这个值需要为Truewsgi.multiprocess:当application对象可能被多个进程同时调用时,这个值需要为Truewsgi.run_once:当server期望application对象在进程的生命周期内只被调用一次时,该值为True

相关文章

什么是泛型?

webpack的loader和plugin有什么区别?

Android传值Intent和Bundle区别?

Bootloader是什么,U-boot是什么?

WSGI到底是什么?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取