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
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM