WSGI到底是什么?
一、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
相关推荐HOT
更多>>
为什么会有“静态链表”,它适用于哪些场景?
一、产生“静态链表”的原因静态链表是在数组的基础上实现的一种链式存储结构。它的出现是为了解决动态链表在内存分配上的问题。由于动态链表采...详情>>
2023-10-19 15:25:20
jira和confluence容易学吗?
一、Jira的学习难度Jira是一款功能强大的项目管理工具,可以帮助团队跟踪任务、问题和缺陷,以及管理项目的进度和优先级。因为Jira提供了专门的...详情>>
2023-10-19 12:32:53
project 怎么插入子项目?
一、project 插入子项目的步骤1、创建一个project文件首先需要创建一个project文件,在电脑桌面上右击鼠标,在下拉框中点击“新建”,并在出现...详情>>
2023-10-19 10:59:12
物联网技术有哪些?
一、物联网技术物联网是指通过互联网、传感器、射频识别等信息技术,实现对物理世界中的各种物体的连接、识别和管理的网络。物联网的应用领域非...详情>>
2023-10-19 07:30:53