zoukankan      html  css  js  c++  java
  • wsgi & cgi的一些概念解释

    可以看这里

    https://www.zhihu.com/question/19998865

    如何理解 CGI, WSGI?修改
    写补充说明
    举报 添加评论 分享 • 邀请回答
    默认排序
    按时间排序
    15 个回答
    
    17
    赞同反对,不会显示你的姓名
    [已重置]
    17 人赞同
    WSGI, Web Server Gateway Interface
    如全称代表的那样,WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的接口规范!
    更具体的规范说明请搜索“PEP 3333”。
    在WSGI规范下,web组件被分成三类:client, server, and middleware.
    WSGI apps(服从该规范的应用)能够被连接起来(be stacked)处理一个request,这也就引发了中间件这个概念,中间件同时实现c端和s端的接口,c看它是上游s,s看它是下游的c。
    WSGI的s端所做的工作仅仅是接收请求,传给application(做处理),然后将结果response给middleware或client.除此以外的工作都交给中间件或者application来做。
    发布于 2014-05-29 1 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
    
    44
    赞同反对,不会显示你的姓名
    hellocode 闭关修炼
    44 人赞同
    正好最近在学习CGI。
    
    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差不多就是这样。
    编辑于 2014-08-30 9 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
    
    44
    赞同反对,不会显示你的姓名
    轩脉刃 名不见经传码农,体制内的小愤青,躁动的…
    44 人赞同
    cgi是通用网关接口,是连接web服务器和应用程序的接口。
    
    web服务器负责接收http请求,但是http请求从request到response的过程需要有应用程序的逻辑处理,web服务器一般是使用C写的,比如nginx,apache。而应用程序则是由各种语言编写,比如php,java,python等。这两种语言要进行交互就需要有个协议进行规定,而cgi就是这么个网关协议。
    
    拿nginx+fastcgi+php为例子,nginx里面的fastcgi模块实现cgi的客户端,php的cgi-sapi实现cgi的服务端。
    
    WSGI就是Python的CGI包装,相对于Fastcgi是PHP的CGI包装
  • 相关阅读:
    C#下水晶报表打印自定义纸张
    设计模式应用之一:控件清空
    自定义StyleCop规则
    1.redis安装 单机
    dubbo个人总结
    spring+redis 集群下的操作
    mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储
    spring framework核心框架体系结构
    oracle‘s package,function,proceture编译时无响应(解决)
    Oracle 在线重定义表分区
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5940651.html
Copyright © 2011-2022 走看看