zoukankan      html  css  js  c++  java
  • Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系

       首先声明这篇文章 是我从 豆瓣 上面看到的。 原文地址 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)

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

         

        

      

           

      

  • 相关阅读:
    k8s记录-helm部署(九)
    k8s记录-master组件部署(八)
    Hadoop记录-Apache hadoop+spark集群部署
    k8s记录-ubuntu安装docker
    Nginx记录-Proxy_pass多个应用配置(转载)
    Java动态调用脚本语言Groovy
    05 吸收应用-会整理还不够?教你吸收、联想、输出、应用
    02 超级搜索术——资源搜索:全面、快速查找全网你想要的任何信息、情报
    01 超级搜索术——信息搜索:全面、快速查找全网你想要的任何信息、情报
    长赢指数基金投资计划-201807(一补仓)
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/Python_Web.html
Copyright © 2011-2022 走看看