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 的代码

Python--WSGI

在 WSGI 容器中使用扭曲的词

在没有 root 的情况下重新加载 django wsgi 脚本

mini-web框架-WSGI-mini-web框架-web服务器集成动态请求的功能(5.1.2)