一 CGI原理及其性能web
1) CGI概念
CGI即通用網關接口(Common Gateway Interface),它是一段程序,運行在服務器上,提供同客戶端HTML頁面的交互,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序鏈接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。數據庫
2)CGI程序語言
事實上,任何一種程序語言,只要能在服務器主機上利用CGI接口來編寫應用程序,均可以叫做CGI程序語言。目前最爲流行的CGI程序語言有四種:C,Shell,Perl和VisualBasic,其它一些語言也有許多人在用,如TCL,Fortran及AppleScript等。編程
3)CGI程序的執行
CGI 程序通常是個可執行程序。編譯好的CGI程序通常要集中放在一個目錄下。具體存放的位置隨操做系統的不一樣而不一樣。CGI程序的執行通常有兩種調用方式:第一種是經過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 的跨平臺性能極佳,幾乎能夠在任何操做系統上實現,如DOS、WINDOWS、UNIX、OS/二、Macintosh等。實現CGI的編程語言也有不少選擇。CGI的應用程序通常都是一個獨立的可執行程序,和WWW服務器各自佔據着不一樣的進程,並且通常一個CGI程序只能處理一個用戶請求。這樣,每有一個用戶請求,都會激活一個CGI進程,當用戶請求數量很是多時,會大量擠佔系統的資源如內存,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程序語言
因爲開發ISAPI應用要用到微軟的一套API,因此能用來開發ISAPI應用的語言不如CGI那麼多。主要有VisualC++4.1以上版本,VisualBasic5.0、BorlandC++5.0也能夠。函數
3)ISAPI原理
ISAPI 的工做原理和CGI大致上是相同的,都是經過交互式主頁取得用戶輸入信息,而後交服務器後臺處理。可是兩者在實現機制上大相庭徑。ISAPI與CGI最大的區別在於:不一樣於CGI,在ISAPI下創建的應用程序是以動態鏈接庫的形式存在;而CGI的應用程序通常都是可執行程序。性能
4)ISAPI程序的執行
ISAPI 應用的工做流程與CGI有一些不一樣。ISAPI應用的DLL不只能夠象CGI程序同樣被用戶請求激活,還能夠被系統預先激活來監視用戶輸入;對於被用戶激活的DLL,在處理完一個用戶請求後不會立刻消失,而是繼續駐留在內存中等待處理別的用戶輸入,直到過了一段時間後一直沒有用戶輸入。加密
5)ISAPI性能評價
一個ISAPI的DLL,能夠在被用戶請求激活後長駐內存,等待用戶的另外一個請求,還能夠在一個DLL裏設置多個用戶請求處理函數,此外,ISAPI的DLL應用程序和WWW服務器處於同一個進程中,效率要顯著高於CGI。不過ISAPI的平臺兼容性較差,目前只能用於微軟本身的Windows95和NT操做系統上,服務器平臺也僅限於 IIS(InternetInformationServer)和MSpersonalwebserver以及NTworkstation上的 peerwebserver。
6)ISAPI 篩選器是什麼?
ISAPI 篩選器是在啓用 ISAPI 的 HTTP 服務器上運行的 DLL(動態連接庫),用以篩選與服務器之間來回傳送的數據。該篩選器註冊事件的通知,例如登陸或 URL 映射。當發生選定事件時,篩選器被調用,而且您能夠監視及更改數據(在數據從服務器傳輸到客戶端或相反的過程當中)。可使用 ISAPI 篩選器提供加強的 HTTP 請求記錄(例如,跟蹤登陸到服務器的用戶)、自定義加密、自定義壓縮或其餘身份驗證方法。
7)ISAPI 服務器擴展和篩選器之間的區別是什麼?
服務器擴展:在 URL 中引用時運行。被顯式調用,例如用 http://myserver/myprog.dll?。被用戶第一次調用時根據請求加載。
篩選器:爲服務器處理的每一個 URL 調用。若是發生已註冊事件,自動爲任何發送到服務器的 URL 運行。服務因其註冊表項而啓動時加載。
服務器擴展和篩選器都:* 共享服務的處理空間。* 必須是線程安全的。* 一經加載便保留在內存中(直到服務中止或者內存被其餘進程所須要)。
三 ISAPI與CGI有哪些相同和不一樣之處?
ISAPI 服務器擴展爲使用 Internet 服務器的通用網關接口 (CGI) 應用程序提供了另外一種選擇。與 CGI 應用程序不一樣,ISAPI 在 HTTP 服務器所在的同一地址空間運行,而且能夠訪問可由 HTTP 服務器使用的全部資源。ISA 的系統開銷比 CGI 應用程序低,由於它們不要求建立其餘進程,也不執行須要越過進程邊界的通訊,而這種通訊很是耗時。若是內存被其餘進程所須要,擴展和篩選器 DLL 均可能被卸載。Internet客戶端經過HTTP服務器調用ISAPI的方法與調用CGI應用程序的方法同樣。例如,客戶端能夠這樣調用一個 CGI 應用程序:http://sample、example.exe?Param1&Param2,它能夠這樣調用一個執行相同功能的 ISAPI:http://sample/example.dll?Param1&Param2。ISAPI 容許在一個DLL中有多個命令,這些命令做爲DLL中CHttpServer 對象的成員函數來實現。CGI要求每一個任務有一個單獨的名稱和一個到單獨的可執行文件的URL映射。每一個新的CGI請求啓動一個新進程,而每一個不一樣的請求包含在各自的可執行文件中,這些文件根據每一個請求加載和卸載,所以系統開銷高於ISA。ISAPI 篩選器沒有等效的 CGI 篩選器。篩選器提供預處理和後處理在客戶端和服務器之間發送的全部數據的能力。