Python Web开发中的WSGI协议简介(3)

- status: 一个字符串,表示HTTP响应状态字符串,比如'200 OK'、'404 Not Found'
  - headers: 一个列表,包含有如下形式的元组:(header_name, header_value),用来表示HTTP响应的headers
  - exc_info(可选): 用于出错时,server需要返回给浏览器的信息

start_response必须返回一个。
我们知道HTTP的响应需要包含status,headers和body,所以在application对象将body作为返回值return之前,需要先调用start_response,将status和headers的内容返回给server,这同时也是告诉server,application对象要开始返回body了。

关系

由此可见,server负责接收HTTP请求,根据请求数据组装environ,定义start_response函数,将这两个参数提供给application。application根据environ信息执行业务逻辑,将结果返回给server。响应中的status、headers由start_response函数返回给server,响应的body部分被包装成iterable作为application的返回值,server将这些信息组装为HTTP响应返回给请求方。

在一个完整的部署中,uWSGI和Gunicorn是实现了WSGI的server,Django、Flask是实现了WSGI的application。两者结合起来其实就能实现访问功能。实际部署中还需要Nginx、Apache的原因是它有很多uWSGI没有支持的更好功能,比如处理静态资源,负载均衡等。Nginx、Apache一般都不会内置WSGI的支持,而是通过扩展来完成。比如Apache服务器,会通过扩展模块mod_wsgi来支持WSGI。Apache和mod_wsgi之间通过程序内部接口传递信息,mod_wsgi会实现WSGI的server端、进程管理以及对application的调用。Nginx上一般是用proxy的方式,用Nginx的协议将请求封装好,发送给应用服务器,比如uWSGI,uWSGI会实现WSGI的服务端、进程管理以及对application的调用。

uWSGI与Gunicorn的比较,由链接可知: 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5a18f0a52638df07849bb2b45c5090b7.html