一 CGI原理及其性能
1) CGI概念
CGI即通用網關接口(Common Gateway Interface),它是一段程序,運行在服務器上,提供同客戶端HTML頁面的交互,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執(zhí)行程序連接起來,它把HTML接收的指令傳遞給服務器的執(zhí)行程序,再把服務器執(zhí)行程序的結果返還給HTML頁。
2)CGI程序語言
事實上,任何一種程序語言,只要能在服務器主機上利用CGI接口來編寫應用程序,都可以叫作CGI程序語言。目前最為流行的CGI程序語言有四種:C,Shell,Perl和VisualBasic,其它一些語言也有許多人在用,如TCL,Fortran及AppleScript等。
3)CGI程序的執(zhí)行
CGI 程序一般是個可執(zhí)行程序。編譯好的CGI程序一般要集中放在一個目錄下。具體存放的位置隨操作系統(tǒng)的不同而不同。CGI程序的執(zhí)行一般有兩種調用方式:第一種是通過URL直接調用,如:“http://202.114.2.182/cgi-win /cgi.exe”,在瀏覽器的URL欄里直接寫入上述描述就可以調用該程序;另一種方式,也是主要的方式,是通過交互式主頁里的FORM欄調用,通常都是用戶在填完一張輸入信息Form后按確認按鈕啟動CGI程序。
4)CGI工作的主要流程
CGI工作的主要流程是:1.一個用戶請求激活一個CGI應用程序;2.CGI應用程序將交互主頁里用戶輸入信息提取出來;3.將用戶輸入的信息傳給服務器主機應用程序(如數據庫查詢〕;4.將服務器處理結果通過HTML文件返回給用戶;5.CGI進程結束。
5)CGI的性能評價
CGI 的跨平臺性能極佳,幾乎可以在任何操作系統(tǒng)上實現,如DOS、WINDOWS、UNIX、OS/2、Macintosh等。實現CGI的編程語言也有很多選擇。CGI的應用程序一般都是一個獨立的可執(zhí)行程序,和WWW服務器各自占據著不同的進程,而且一般一個CGI程序只能處理一個用戶請求。這樣,每有一個用戶請求,都會激活一個CGI進程,當用戶請求數量非常多時,會大量擠占系統(tǒng)的資源如內存,CPU時間等,造成效能低下。
二 ISAPI原理及其性能
1)ISAPI概念
ISAPI即Internet Server Application Program Interface,是微軟提供的一套面向Internet服務的API接口,它能實現CGI能提供的全部功能,并在此基礎上進行了擴展,如提供了過濾器應用程序接口。ISAPI 服務器擴展是可以被 HTTP 服務器加載和調用的 DLL。Internet 服務器擴展也稱為 Internet 服務器應用程序 (ISA),用于增強符合 Internet 服務器 API (ISAPI) 的服務器的功能。ISA 通過瀏覽器應用程序調用,并且將相似的功能提供給通用網關接口 (CGI) 應用程序。
2)ISAPI程序語言
由于開發(fā)ISAPI應用要用到微軟的一套API,所以能用來開發(fā)ISAPI應用的語言不如CGI那么多。主要有VisualC++4.1以上版本,VisualBasic5.0、BorlandC++5.0也可以。
3)ISAPI原理
ISAPI 的工作原理和CGI大體上是相同的,都是通過交互式主頁取得用戶輸入信息,然后交服務器后臺處理。但是二者在實現機制上大相庭徑。ISAPI與CGI最大的區(qū)別在于:不同于CGI,在ISAPI下建立的應用程序是以動態(tài)連接庫的形式存在;而CGI的應用程序一般都是可執(zhí)行程序。
4)ISAPI程序的執(zhí)行
ISAPI 應用的工作流程與CGI有一些不同。ISAPI應用的DLL不僅可以象CGI程序一樣被用戶請求激活,還可以被系統(tǒng)預先激活來監(jiān)視用戶輸入;對于被用戶激活的DLL,在處理完一個用戶請求后不會馬上消失,而是繼續(xù)駐留在內存中等待處理別的用戶輸入,直到過了一段時間后一直沒有用戶輸入。
5)5ISAPI性能評價
一個ISAPI的DLL,可以在被用戶請求激活后長駐內存,等待用戶的另一個請求,還可以在一個DLL里設置多個用戶請求處理函數,此外,ISAPI的DLL應用程序和WWW服務器處于同一個進程中,效率要顯著高于CGI。不過ISAPI的平臺兼容性較差,目前只能用于微軟自己的Windows95和NT操作系統(tǒng)上,服務器平臺也僅限于 IIS(InternetInformationServer)和MSpersonalwebserver以及NTworkstation上的 peerwebserver。
6)ISAPI 篩選器是什么?
ISAPI 篩選器是在啟用 ISAPI 的 HTTP 服務器上運行的 DLL,用以篩選與服務器之間來回傳送的數據。該篩選器注冊事件的通知,例如登錄或 URL 映射。當發(fā)生選定事件時,篩選器被調用,并且您可以監(jiān)視及更改數據(在數據從服務器傳輸到客戶端或相反的過程中)。可以使用 ISAPI 篩選器提供增強的 HTTP 請求記錄(例如,跟蹤登錄到服務器的用戶)、自定義加密、自定義壓縮或其他身份驗證方法。
7)ISAPI 服務器擴展和篩選器之間的區(qū)別是什么?
服務器擴展:在 URL 中引用時運行。被顯式調用,例如用 http://myserver/myprog.dll?。被用戶第一次調用時根據請求加載。
篩選器:為服務器處理的每個 URL 調用。如果發(fā)生已注冊事件,自動為任何發(fā)送到服務器的 URL 運行。服務因其注冊表項而啟動時加載。
服務器擴展和篩選器都:* 共享服務的處理空間。* 必須是線程安全的。* 一經加載便保留在內存中(直到服務停止或者內存被其他進程所需要)。
三 ISAPI與CGI有哪些相同和不同之處?
ISAPI 服務器擴展為使用 Internet 服務器的通用網關接口 (CGI) 應用程序提供了另一種選擇。與 CGI 應用程序不同,ISAPI 在 HTTP 服務器所在的同一地址空間運行,并且可以訪問可由 HTTP 服務器使用的所有資源。ISA 的系統(tǒng)開銷比 CGI 應用程序低,因為它們不要求創(chuàng)建其他進程,也不執(zhí)行需要越過進程邊界的通信,而這種通信非常耗時。如果內存被其他進程所需要,擴展和篩選器 DLL 都可能被卸載。
Internet客戶端通過HTTP服務器調用ISAPI的方法與調用CGI應用程序的方法一樣。例如,客戶端可以這樣調用一個 CGI 應用程序:http://sample、example.exe?Param1&Param2,它可以這樣調用一個執(zhí)行相同功能的 ISAPI:http://sample/example.dll?Param1&Param2。ISAPI 允許在一個DLL中有多個命令,這些命令作為DLL中CHttpServer 對象的成員函數來實現。CGI要求每個任務有一個單獨的名稱和一個到單獨的可執(zhí)行文件的URL映射。每個新的CGI請求啟動一個新進程,而每個不同的請求包含在各自的可執(zhí)行文件中,這些文件根據每個請求加載和卸載,因此系統(tǒng)開銷高于ISA。
ISAPI 篩選器沒有等效的 CGI 篩選器。篩選器提供預處理和后處理在客戶端和服務器之間發(fā)送的所有數據的能力。
完!