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

贊助商

分類目錄

贊助商

最新文章

搜索

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

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

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

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

 ISAPI和CGI比較

ISAPI和CGI比較

ISAPI 和 CGI 比較

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

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

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

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

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

1)接收數據放入 EXTENSION_CONTROL_BLOCK 結構成員lpbData中,而不是通過標準輸入(stdin)進程令牌讀取數據

2)使用 WriteClient 函數將數據發(fā)送回客戶端,而不是通過標準輸出(stdout)進程令牌發(fā)送數據。

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

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

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

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

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

Internet 客戶端通過 HTTP 服務器調用 ISA 的方法與調用 CGI 應用程序的方法一樣。例如,客戶端可以這樣調用一個 CGI 應用程序:

http://sample/example.exe?Param1

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

http://sample/example.dll?Param1

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

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

標簽: IIS  
x
  • 站長推薦
/* 左側顯示文章內容目錄 */