WSGI是什么 - 读 PEP 3333之后

2018-02-13  本文已影响0人  ztao

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_ 开头的请求头部

上一篇 下一篇

猜你喜欢

热点阅读