美文网首页
WSGI是什么 - 读 PEP 3333之后

WSGI是什么 - 读 PEP 3333之后

作者: ztao | 来源:发表于2018-02-13 09:36 被阅读0次

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

    相关文章

      网友评论

          本文标题:WSGI是什么 - 读 PEP 3333之后

          本文链接:https://www.haomeiwen.com/subject/flcwcxtx.html