start_response详解
start_response 是Python的WSGI(Web Server Gateway Interface)中的一个重要概念,它是一个可调用对象(通常是一个函数),在WSGI应用程序里发挥着关键作用,下面为你详细介绍。
作用
在WSGI规范里,`start_response` 用于设定HTTP响应的状态码与响应头信息。当WSGI应用程序处理完请求之后,就需要借助 `start_response` 来告知服务器如何设置响应的元数据,接着再返回响应的主体内容。
参数
`start_response` 通常接收两个必需参数和一个可选参数:
- `status`:这是一个字符串,代表HTTP响应的状态码与状态消息,例如 `'200 OK'` 或者 `'404 Not Found'`。
- `response_headers`:这是一个由元组构成的列表,每一个元组包含两个元素,即响应头的名称与对应的值,例如 `[('Content-Type', 'text/html')]`。
- `exc_info`:这是一个可选参数,主要用于处理异常情况。在正常状况下,该参数的值为 `None`。
示例代码
def simple_app(environ, start_response):# 设置响应状态码和消息status = '200 OK'# 设置响应头headers = [('Content-type', 'text/html; charset=utf-8')]# 调用 start_response 来设置响应状态和头信息start_response(status, headers)# 定义响应的主体内容response_body = '<h1>Hello, World!</h1>'return [response_body.encode('utf-8')]
在这个示例中,`simple_app` 是一个符合WSGI规范的应用程序。当服务器调用这个应用程序时,会传入两个参数:`environ`(包含请求的环境信息)和 `start_response`(用于设置响应的状态和头信息)。在应用程序内部,首先定义了响应的状态码和响应头,接着调用 `start_response` 来设置这些信息,最后返回响应的主体内容。
注意事项
- `start_response` 必须在返回响应主体之前被调用,不然服务器将无法正确设置响应的状态和头信息。
- 响应主体必须是一个可迭代对象,并且每个元素都应该是字节串。所以在示例中,使用了 `encode('utf-8')` 方法将字符串转换为字节串。