Python 中有许多web框架,为了更好读兼容性,python定义了web框架和web服务器之间读接口,即 PEP-3333(之前的版本是 PEP-333)
WSGI 接口针对两方面:服务器(网关),和应用(框架)。服务器端调用了应用端提供的一个可调用对象。
中间件组件其实是两边的功能各实现一部分,对服务器来说是应用,对应用来说是服务器。
callable(可调用)指一个有 __call__ 方法的函数,方法,类或实例。
应用对象必须接受两个位置参数,为了解释方便一般叫 environ, start_response,其实叫什么并无所谓。服务器或网关调用应用对象的时候必须有这两个位置参数,如result = application(environ, start_response)
environ 是(python内置)字典对象,包含CGI风格的环境变量,字典中包含WSGI要求的变量,可能还有服务器相关的变量。
start_response 接受三个位置变量,两个必须的status, response_headers和一个可选的exc_info,像这样:
start_response(status, response_headers, exc_info=None)
其中,status是一个状态字符串,类似"999 Message here"这种类型。response_headers 是一个list 的 (header_name, header_value)tuples,描述 HTTP 响应header。start_response 返回一个 write(body_data) 可调用,用一个bytestring做位置参数来表示响应的body。
应用对象被服务器调用时会返回一个能产生0或更多 bytestring的迭代器。
environ 变量
REQUEST_METHOD非空,表示http方法,如"GET" 或 "POST"
SCRIPT_NAME 最初和应用对象对应的部分请求URL的“路径”
PATH_INFO 其余的路径
QUERY_STRING 请求URL里跟随? 的部分
CONTENT_TYPE ,CONTENT_LENGTH 如其名所指
SERVER_NAME, SERVER_PORT 非空
SERVER_PROTOCOL 请求所用的协议,如"HTTP/1.0" 或 "HTTP/1.1",注意回应不必要是相同协议。
HTTP_ 变量 客户端提供的 HTTP_ 开头的请求头部
网友评论