关闭

Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系

标签: python
386人阅读 评论(0) 收藏 举报

   首先声明这篇文章 是我从 豆瓣 上面看到的。 原文地址 http://www.douban.com/note/13508388/?start=0&post=ok#last    看我之后 豁然开朗,对Web的理解有加深了一层,在此再感谢一下文章的作者。写这篇文章 :一 写下 自己的理解;二  让更多初学Python Web开发和我有相同迷惑的人能到看到这篇文章

   先把原文的内容贴出来

复制代码
Apache/lighttpd: 相当于一个request proxy,根据配置,把不同的请求转发给不同的server处理,例如静态的文件请求自己处理,这个时候它就像一个web server,对于fastcgi/python这样的请求转发给flup这样的Server/Gateway进行处理

 flup: 一个用python写的web server,也就是cgi中所谓的Server/Gateway,它负责接受apache/lighttpd转发的请求,并调用你写的程序 (application),并将application处理的结果返回到apache/lighttpd

fastcgi: apache/lighttpd的一个模块,虽然flup可以作为一个独立的web server使用,但是对于浏览器请求处理一般都交给 apache/lighttpd处理,然后由apache/lighttpd转发给flup处理,这样就需要一个东西来把apache/lighttpd跟flup联系起来,这个东西就是fastcgi,它通过环境变量以及socket将客户端请求的信息传送给flup并接收flup返回的结果

web.py: 应该说有了上面的东西你就可以开始编写你的web程序了,但是问题是你就要自己处理浏览器的输入输出,还有cookie、session、模板等各种各样的问题了,web.py的作用就是帮你把这些工作都做好了,它就是所谓的web framework,另外一个出名的是django,不过感觉太复杂了,web.py差不多就够用了

WSGI : 除了flup Server/Gateway外还有很多其他人的写的Server/Gateway, 这个时候就会出问题了,如果你在flup上写了一个程序,现在由于各种原因你要使用xdly了,这个时候你的程序也许就要做很多痛苦的修改才能使用 xdly server了,WSGI就是一个规范,他规范了flup这个服务应该怎么写,应该使用什么方式什么参数调用你写的程序(application)等,当然同时也规范你的程序应该怎么写了,这样的话,只要flup跟xdly都遵守WSGI的话,你的程序在两个上面都可以使用了,flup就是一个WSGI server
复制代码

        还有一条评论也很透彻

WSGI是python的接口规范,这个规范是针对WEB服务器和python应用(框架等)的交互的。FASTCGI则是两者底层的通信协议的规范。

        学过Java的人马上会想到 Servlet 规范。没错Python的 WSGI规范  就类似于 Java 中的 Servlet规范。 事实上Python的设计者们制定 WSGI规范 就是想达到 像Java中Servletd的效果。

        下面就来 说说 自己对 这些 名词 的理解 

        HTTP Server 就是我们通常所说的 Web Server。我们知道 互联网的 目地就是实现文件的共享,但我们该怎么实现文件共享呢?于是就出现了各种文件共享协议 FTP,SMB,NFS等当然这些协议都属于TCP/IP协议族,架构在TCP/IP 之上 ,属于TCP/IP 中的 运用层。那HTTP呢?

  中文名称:超文本传送协议

       英文名称:hypertext transport protocol;

       HTTP定义:一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

       HTTP和FTP,SMB,NFS一样都属于TCP/IP 协议族中的 运用层,其实我们完全可以按照理解FTP 协议一样 理解HTTP,它们本质是一样的,归根到底都是 机器A对机器B的文件的访问的之间的一种的协议。

       例如 我们在某视频网站上 点击播放 一个视频,当我们点击该视频的时候,浏览器向 该视频网站的服务器上发送HTTP协议内容,该视频网站的Web服务器解析发送过来的HTTP请求,然后将请求交给该视频网站的Web系统来处理,  Web系统 在该服务器上 指定的位置 找到 这个视频文件,在回应给Web服务器,Web服务器在把响应的内容转换为HTTP协议反馈给我们,我们浏览器在解析反馈回来的HTTP内容,播放该视频展示给我们看。

        我这个过程概括起来就是 我们的机器 对 视频网站服务器机器上面的 一个视频文件的访问。他们之间通过HTTP协议来访问。

 

        在来总结 WSGI、flup、fastcgi、web.py之间的关系,这其实是 Web服务器 与 Web系统 之间详细的处理过程。

        Apache/Lighttpd:  HTTP Server(Web服务器),如同原文所说 HTTP Server其实相当于一个 request proxy(请求代理),它们负责解析 HTTP 协议,因为你不能在自己的程序中先 解析HTTP 协议,然后在进行响应的处理。这样的话 第一增加了程序员的工作难度(HTTP解析还真有点负责) 第二:程序会变的复杂,不易修改。所以我们就把解析HTTP协议这个工作交给一种专门的软件来做----HTTP Server。HTTP协议的解析的工作完成了,协议被解析成各种请求,那谁来处理这些请求来?当请求是一个静态文件(HTML文件)的时候,HTTP Server则会自己处理这些请求,此时HTTP Server 就相当于一个Web Server。但当我们请求的是一个 cgi/fastcgi/python 脚本的时候呢?很明显HTTP Server就处理不了啦,因为这些脚本无法直接转换为HTML文本,要依赖于某种特定的容器(环境)下才可以,对于 cgi/fastcgi/python 这样的请求转发给flup这样的Server/Gateway进行处理。就比如我们在Java Web中要请求一个Servlet时,普通的HTTP Server肯定处理不了,Servelt只能运行在实现了Servelt规范的服务器上才可以。

    学过Java Web的看了 原文 后 是不是觉得 Tomcate服务器相当于Python中的(HTTP Server+flup+fastcgi+WSGI)

         其他的名词 原文说的 很详细,我就不罗嗦啦。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:654393次
    • 积分:8003
    • 等级:
    • 排名:第2658名
    • 原创:45篇
    • 转载:629篇
    • 译文:0篇
    • 评论:41条
    最新评论