CGI,WSGI區別

WSGIhtml

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

我的理解:

wsgi: Web服務器網關接口(Python Web Server Gateway Interface,縮寫爲WSGI)CGI(common gateway unterface)git

工做原理:web

webob:WebOb是一個用於對WSGI request環境進行包裝(也就是變得易用)以及用於建立WSGI response的一個包。數據庫

特色:一是兼容性好,二是使用簡單。服務器

pecan:Pecan專一於HTTP自己,提供object-dispatch方式路由的超輕量級的Python Web框架,沒有支持一些額外的功能,session

好比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 來源:知乎 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索