wsgi是一种规范(specification),定义了Web服务器和Web框架(应用)之间的接口标准。
wsgi定义了三种角色(role):服务器、框架/应用、中间件(middleware).
-
服务器端:
服务器端提供:
1)环境变量,存储在environ 字典中
2)start_response 函数,该函数接收两个参数:http状态和response headers -
应用端:
应用端呈现给服务端的是一个可调用的Python对象(即application对象,可以是class,object或function,只要可以调用即可),调用该对象的参数即为上文提到的environ和start_response函数。
Web服务器通过调用application来将请求分发给应用,应用负责组建response headers,调用服务器提供的start_response,生成iterable返回的数据(应用在返回任何数据前,需要调用start_response),最后由web服务器将数据(headers and data) 返回给客户端:
iterable = app(environ, start_response)
for data in interable:
# send data to client
- Middleware 在Web服务器和应用之间,在应用被调用之前/后(pre-process/post-process)被调用,通常的做法是将application包裹(wrap)起来,然后提供这个wrapped application 给服务器去调用. 对服务端而言,相当于应用;对其他应用而言,相当于服务端,提供environ和start_response,接收response. 中间件可以叠加,称为Middleware Chains,如:
MyEnvironMiddleware(
MyStatusMiddleware(
MyApplication(environ, start_response),*args,**args),
*args, **args)