zoukankan      html  css  js  c++  java
  • 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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    flutter sdk版本升级或者降级到指定版本
    flutter upgrage到1.17版本 android打包报错 Could not determine the dependencies of task ':app:lintVitalRelease'.
    小程序 自定义alert弹窗 带动画
    小程序 自定义cell 自定义group
    小程序 自定义弹窗禁止底部内容滚动 textarea内容上移
    css fixed 强制居中
    小程序 正则表达式
    小程序 自定义导航栏
    小程序 swiper自定义dot
    java 中锁的分类
  • 原文地址:https://www.cnblogs.com/jingtyu/p/6951436.html
Copyright © 2011-2022 走看看