千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:大连千锋IT培训  >  技术干货  >  WSGI到底是什么?

WSGI到底是什么?

来源:千锋教育
发布人:xqq
时间: 2023-10-15 23:16:04

一、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
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

什么软件可以打开zip格式文件?

2023-10-15

前端是什么,分几种?

2023-10-15

什么是服务器(server)?

2023-10-15

最新文章NEW

线索二叉树为什么使用标志域而不直接添加指向前驱和后继的指针域?

2023-10-15

数据结构线性链表插入中的ElemType e与删除中的ElemType&e有什么区别吗?

2023-10-15

数据库系统的实现中采用了哪些常用的数据结构?

2023-10-15

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>