CGI,WSGI区别

WSGI

参考link:https://jingtyu.gitbooks.io/learning-openstack/content/351-usgi.html(本人的gitbook)

个人理解:

wsgi: Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)CGI(common gateway unterface)

工作原理:

webob:WebOb是一个用于对WSGI request环境进行包装(也就是变得易用)以及用于创建WSGI response的一个包。

特点:一是兼容性好,二是使用简单。

pecan:Pecan专注于HTTP本身,提供object-dispatch方式路由的超轻量级的Python Web框架,没有支持一些额外的功能,

比如session或是数据库 。

wsme:(Web Service Made Easy)WSME会自动帮你检查HTTP请求和响应中的数据是否符合预先设定好的要求。WSME的主要方式是通过装饰器来控制controller方法的输入和输出。WSME中主要使用两个控制器:

@signature: 这个装饰器用来描述一个函数的输入和输出。

@wsexpose: 这个装饰器包含@signature的功能,同时会把函数的路由信息暴露给Web框架,效果就像Pecan的expose装饰器。

paste:Python paste是一个WSGI工具包,paste 是python的一个module,通过paste, 你可以把wsgi的模块写入ini风格的配置文

件,灵活部署。

routes:Rest即Representational State Transfer,中文大家翻译成表述性状态转移。在OpenStack中的API Daemon都会有一个Router类,来构建资源与URL直接的映射关系,完成从接收到URL请求然后映射到具体的函数上执行的整个过程。

CGI

作者:hellocode
链接:https://www.zhihu.com/question/19998865/answer/29395327
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

CGI是比较原始的开发动态网站的方式。你可以想象一下,一个网站的动态内容肯定是程序生成的,光是静态的html页面无法达到这个效果。那么,这个程序就需要接受客户端的请求,然后进行相应处理,再返回给客户端,客户端和服务端的通信当然是通过HTTP协议。

然后我们会发现,这个程序在处理客户端请求的时候,大部分时候会进行很多重复的工作,比如说HTTP请求的解析。也就是说,你的程序需要解析HTTP请求,我的程序也需要解析。

于是为了DRY原则,Web服务器诞生了。(以下所说的都是CGI的工作模式)

于是Web服务器可以解析这个HTTP请求,然后把这个请求的各种参数写进进程的环境变量,比如
REQUEST_METHOD,PATH_INFO之类的。之后呢,服务器会调用相应的程序来处理这个请求,这个程序也就是我们所要写的CGI程序了。它会负责生成动态内容,然后返回给服务器,再由服务器转交给客户端。服务器和CGI程序之间通信,一般是通过进程的环境变量和管道。

这样做虽然很清晰,但缺点就是每次有请求,服务器都会fork and exec,每次都会有一个新的进程产生,开销还是比较大的。

原因在与CGI程序是一个独立的程序,它是可以独立运行的(在提供HTTP请求的情况下),它可以用几乎所有语言来写,包括perl,c,lua,python等等。所以对于一个程序,服务器只能以fork and exec的方式来调用它了。

 

CGI,SWGI区别

cgi通过环境变量,输入输出流完成web server与处理逻辑的http协议的交互,由于是基于流方式,所以各种语言都可以写cgi程序。wsgi是将web server参数python化,封装为request对象传递给apllication命名的func对象并接受其传出的response参数,由于其处理了参数封装和结果解析,才有python世界web框架的泛滥,在python下,写web框架就像喝水一样简单:)


作者:涂飞平
链接:https://www.zhihu.com/question/19998865/answer/27033737
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2017-06-06 14:28  jimtong  阅读(4090)  评论(0编辑  收藏  举报