技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

IIS里ISAPI和CGI比較:幾種執(zhí)行方式的不同

作者:admin    時間:2017-4-7 10:17:7    瀏覽:

在IIS設(shè)置里,有一項是: ISAPI 和 CGI 限制。我由此想到的是 ISAPI 和 CGI 的區(qū)別在哪?它們的執(zhí)行方式又有何不同?

在比較兩者之前,我們需先了解下它們的含義。對于 ISAPI,我們可以從上一篇文章中描述到的 ISAPI 概述中得以了解。CGI,是 Common Gateway Interface 的簡稱,是外部應(yīng)用程序(CGI程序)與WEB服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的過程。CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡單的靜態(tài)超媒體文檔變成一個完整的新的交互式媒體。絕大多數(shù)的CGI程序被用來解釋處理來自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器。CGI程序使網(wǎng)頁具有交互功能。

 ISAPI和CGI比較

ISAPI和CGI比較

ISAPI 和 CGI 比較

ISAPI(Internet 服務(wù)器應(yīng)用程序編程接口)模型被發(fā)展成為CGI(通用網(wǎng)關(guān)接口)更快地替代方案。ISAPI提供比CGI更多優(yōu)越性,包括低開銷、更快加載時間和更好的可伸縮性。CGI和ISAPI編程模型主要區(qū)別是實現(xiàn)方法不同。

傳統(tǒng)CGI,系統(tǒng)對于每個請求,將創(chuàng)建唯一進(jìn)程。當(dāng)http server每次收到一個請求時,都將啟動一個新進(jìn)程。對于cgi請求大量資源,操作系統(tǒng)必須保持這些進(jìn)程。因固有限制,很難開發(fā)出靈活高效的互聯(lián)網(wǎng)應(yīng)用。

使用ISAPI,不需要單獨進(jìn)程。使用線程隔離和同步工作項目。

ISAPI 與 CGI 幾種執(zhí)行方式的不同

ISAPI 擴(kuò)展執(zhí)行以下操作:

1)接收數(shù)據(jù)放入 EXTENSION_CONTROL_BLOCK 結(jié)構(gòu)成員lpbData中,而不是通過標(biāo)準(zhǔn)輸入(stdin)進(jìn)程令牌讀取數(shù)據(jù)

2)使用 WriteClient 函數(shù)將數(shù)據(jù)發(fā)送回客戶端,而不是通過標(biāo)準(zhǔn)輸出(stdout)進(jìn)程令牌發(fā)送數(shù)據(jù)。

3)通過 EXTENSION_CONTROL_BLOCK 結(jié)構(gòu)訪問常見cgi變量。對于其它變量,擴(kuò)展調(diào)用GetServerVariable函數(shù)。cgi可執(zhí)行文件中通過getenv環(huán)境變量表檢索。

4)使用 WriteClient 函數(shù)直接發(fā)送標(biāo)題或http狀態(tài)碼,或者調(diào)用HSE_REQ_SEND_RESPONSE_HEADER_EX ServerSupportFunction,替代 STDOUT 發(fā)送標(biāo)題

5)位置/URL/標(biāo)題 重定向。本地url,擴(kuò)展使用HSE_REQ_SEND_URL結(jié)構(gòu),而不是寫標(biāo)頭至STDOUT。若url是遠(yuǎn)程或未識別的,擴(kuò)展使用 ServerSupportFunction 回調(diào)函數(shù) HSE_REQ_SEND_URL_REDIRECT_RESP。當(dāng)iis傳入請求為一個特定擴(kuò)展時,iis加載dll到內(nèi)存中,為dll其它傳入請求服務(wù)。iis卸載擴(kuò)展時,若存在TerminateExtension函數(shù)調(diào)用,使用TerminateExtension可以釋放(鎖定或初始加載期間、Keep-Alive連接)的任何資源。

ISAPI 與 CGI 有哪些相同和不同之處?

ISAPI 服務(wù)器擴(kuò)展為使用 Internet 服務(wù)器的通用網(wǎng)關(guān)接口 (CGI) 應(yīng)用程序提供了另一種選擇。與 CGI 應(yīng)用程序不同,ISA 在 HTTP 服務(wù)器所在的同一地址空間運行,并且可以訪問可由 HTTP 服務(wù)器使用的所有資源。ISA 的系統(tǒng)開銷比 CGI 應(yīng)用程序低,因為它們不要求創(chuàng)建其他進(jìn)程,也不執(zhí)行需要越過進(jìn)程邊界的通信,而這種通信非常耗時。如果內(nèi)存被其他進(jìn)程所需要,擴(kuò)展和篩選器 DLL 都可能被卸載。

Internet 客戶端通過 HTTP 服務(wù)器調(diào)用 ISA 的方法與調(diào)用 CGI 應(yīng)用程序的方法一樣。例如,客戶端可以這樣調(diào)用一個 CGI 應(yīng)用程序:

http://sample/example.exe?Param1

它可以這樣調(diào)用一個執(zhí)行相同功能的 ISA:

http://sample/example.dll?Param1

ISAPI 允許在一個 DLL 中有多個命令,這些命令作為 DLL 中 CHttpServer 對象的成員函數(shù)來實現(xiàn)。CGI 要求每個任務(wù)有一個單獨的名稱和一個到單獨的可執(zhí)行文件的 URL 映射。每個新的 CGI 請求啟動一個新進(jìn)程,而每個不同的請求包含在各自的可執(zhí)行文件中,這些文件根據(jù)每個請求加載和卸載,因此系統(tǒng)開銷高于 ISA。

ISAPI 篩選器沒有等效的 CGI 篩選器。篩選器提供預(yù)處理和后處理在客戶端和服務(wù)器之間發(fā)送的所有數(shù)據(jù)的能力。

標(biāo)簽: IIS  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */