WSGI
Posted 张京墨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSGI相关的知识,希望对你有一定的参考价值。
1. 什么是WSGI
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
2. 发展历史
1989年
特点:
server只能返回静态文件,例如html,css,image等静态文件
过程:服务器收到request请求,知道要获取index.html,服务器从硬盘中读取index.html的内容, 将读取的内容放在body中返回。
1991年
需求:想让服务器返回html form表单
特点:
1997年
出现了公共的网管接口:CGI
目的是为了设置一组规范,命名一些环境变量,以及声明它们的用途。
公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。
CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,
包括流行的C、C ++、Java、VB 和Delphi 等。CGI分为标准CGI和间接CGI两种。标准CGI使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI又称缓冲CGI,在CGI程序和CGI接口之间插入一个缓冲程序,
缓冲程序与CGI接口间用标准输入输出进行通信
规定了下图的内容
2003年
python为了进一步的执行cgi的标准,因此规定了标准化脚本,任何从web服务器调用脚本,都必须拥有类似于nerdy的函数。函数接受两个变量,env是一个dict字典,用来存储cgi规定的变量。foo是一个特殊参数(函数),只需要已特定的方式调用第二个参数即可。
foo函数的两个参数 1. http_status --- response的status 2. http_headers_list --- response的headers
nerdy函数返回值,就是response的body部分
上图说面了单个http请求的总时间消耗。
紫色部分:http server解析http request,并且创建环境变量(类似于cgi规定的变量)
蓝色部分:用python脚本处理请求所花费的时间。
红色部分:红色表示从硬盘上加载python二进制文件
# TODO
以上是关于WSGI的主要内容,如果未能解决你的问题,请参考以下文章
tornado 启动WSGI应用(Flask)使用多线程将同步代码变成异步
python编写的一个简单那的WSGI PDF server 的代码