版權歸原作者所有,如有侵權,請聯(lián)系我們

[科普中國]-Web服務器網(wǎng)關接口

科學百科
原創(chuàng)
科學百科為用戶提供權威科普內(nèi)容,打造知識科普陣地
收藏

Web服務器網(wǎng)關接口Python Web Server Gateway Interface,縮寫為WSGI)是為Python語言定義的Web服務器和Web應用程序或框架之間的一種簡單而通用的接口。自從WSGI被開發(fā)出來以后,許多其它語言中也出現(xiàn)了類似接口。

發(fā)展背景以前,如何選擇合適的Web應用程序框架成為困擾Python初學者的一個問題,這是因為,一般而言,Web應用框架的選擇將限制可用的Web服務器的選擇,反之亦然。那時的Python應用程序通常是為CGI,F(xiàn)astCGI,mod_python中的一個而設計,甚至是為特定Web服務器的自定義的API接口而設計的。

WSGI(有時發(fā)音作'wiz-gee')是作為Web服務器與Web應用程序或應用框架之間的一種低級別的接口,以提升可移植Web應用開發(fā)的共同點。WSGI是基于現(xiàn)存的CGI標準而設計的。1

規(guī)范概覽WSGI區(qū)分為兩個部分:一為“服務器”或“網(wǎng)關”,另一為“應用程序”或“應用框架”。在處理一個WSGI請求時,服務器會為應用程序提供環(huán)境信息及一個回調(diào)函數(shù)(Callback Function)。當應用程序完成處理請求后,通過前述的回調(diào)函數(shù),將結果回傳給服務器。

所謂的WSGI中間件同時實現(xiàn)了API的兩方,因此可以在WSGI服務器和WSGI應用之間起調(diào)解作用:從Web服務器的角度來說,中間件扮演應用程序,而從應用程序的角度來說,中間件扮演服務器?!爸虚g件”組件可以執(zhí)行以下功能:

重寫環(huán)境變量后,根據(jù)目標URL,將請求消息路由到不同的應用對象。

允許在一個進程中同時運行多個應用程序或應用框架。

負載均衡和遠程處理,通過在網(wǎng)絡上轉(zhuǎn)發(fā)請求和響應消息。

進行內(nèi)容后處理,例如應用XSLT樣式表。2

示例程序用Python語言寫的一個匹配WSGI的“Hello World”應用程序如下所示:

def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield "Hello world!\n"其中

第一行定義了一個名為app的callable,接受兩個參數(shù),environ和start_response,environ是一個字典包含了CGI中的環(huán)境變量,start_response也是一個callable,接受兩個必須的參數(shù),status(HTTP狀態(tài))和response_headers(響應消息的頭)。

第二行調(diào)用了start_response,狀態(tài)指定為“200 OK”,消息頭指定為內(nèi)容類型是“text/plain”。

第三行將響應消息的消息體返回。2

網(wǎng)頁服務器雖然每個網(wǎng)頁服務器程序有很多不同,但有一些共同的特點:每一個網(wǎng)頁服務器程序都需要從網(wǎng)絡接受HTTP請求,然后提供HTTP回復給請求者。HTTP回復一般包含一個HTML文件,有時也可以包含純文本文件、圖像或其他類型的文件。

一般來說這些文件都存儲在網(wǎng)頁服務器的本地文件系統(tǒng)里,而URL和本地檔名都有一個階級組織結構的,服務器會簡單的把URL對照到本地文件系統(tǒng)中。當正確安裝和設置好網(wǎng)頁服務器軟件,服務器管理員會從服務器軟件放置文件的地方指定一個本地路徑名為根目錄。2

本詞條內(nèi)容貢獻者為:

王沛 - 副教授、副研究員 - 中國科學院工程熱物理研究所