应用端
提供一个callable 的object. 它应当接受两个参数environ
, start_response
。并将response body 以一个iterable object 的形式return。
- environ
包含当前request的各种参数 - start_reponse
一个callable object, 接受status
,response_headers
和exc_info
.exc_info
是应用将错误传递给网关端用的。start_response
作用是写reponse header,所以需在retrun之前调用 - return - iterable response body
服务器端会读完它并将其写入response
服务器端
每次request 调用应用端端callable 并传入相应的参数。在应用端调用start_response
之后,写header,并在应用端返回后,发送header和body
中间件
对应用端看来它是服务器端,服务器端看来它是应用端。也就是说它需要同时实现应用端和服务器端。
所以它需要
- 能接收一个应用端程序,并实现自己的
start_response
,将服务器端的start_response
封装进去 - callable 并能接收接收
environ
,start_response
, - 在服务器端调用自己的时候,调用应用程序,并且传入自己的
start_response
由上面可以看出,中间件可以在两个地方实现自己的功能
- 在被服务器端调用的时候,可以改写
environ
- 在自己封装的
start_response
中,可以改写从应用端得到的status
,response_headers
- 在应用端返回之后,可以改写应用端返回的reponse body