CGI是外部擴展應用程序與WWW服務器交互的一個標準接口。按照CGI標準編寫的外部擴展應用程序可以處理客戶端(一般是WWW瀏覽器)輸入協同工作數據完成客戶端與服務器的交互操作。這在實際應用中非常有用,如可以編寫CGI外部擴展程序來訪問外部數據庫,客戶端用戶可以通過它和WWW服務器來進行數據查詢。 (1)標準CGI 服務器是客戶端(如瀏覽器)與擴展程序之間的通道。當客戶端的用戶完成了一定輸入工作(比如填充完HTML文檔中的FORM表)張家口哪有做網站之后向服務器發出HTTP請求(稱為CGI請求),服務器守護進程接收到該請求后,就創建一個子進程(稱為CGI進程)。該CGI子進程將CGI請求的有關數據設置成環境變量,在外CGI程序與服務器間建立兩條數據通道(標準I/0),然后啟用URL指定的CGI程序,并與該子進程保持同步,以監測CGI程序的執行狀態。子進程通過標準輸出流將處理結果傳遞給服務器守護進程,守護進程再將處理結果作為應答消息回到送到客戶端。外CGI程序通過環境變量、命令行參數、標準輸入輸出與WWW服務器進行通訊,傳遞有關參數和處理結果。環境變量:當服務器守護進程創建子進程運行CGI程序時,設置相應的環境變量和命令行參數,以傳遞給客戶端和服務器的有關信息給該子進程。命令行參數:命令行以數僅在有HTML文檔中有ISINDEX查詢的情況下使用。標準輸出輸出:當HTTP請求模式采用POST方式時,CGI程序通過標準輸入流和有關環境變量來獲取客戶端傳輸數據;如采用GET方式時,CGI程序通過環境變量獲取客戶端傳輸數據。張家口網站制作當CGI程序要返回處理結果(一般為HTML文檔)給客戶端時,它通過標準輸出流將該結果數據傳遞給服務器守護進程。 (2)緩沖CGI 標準CGI使用STDIN/STDOUT來進行數據通訊,這是由其最初開發環境(Unix操作系統)所決定的。但是許多Windows環境下的編程工具(如VB和Delphi等)是不支持這種I/0方法的,這時就不能用它們來開發基于標準CGI的應用程序。于是有些服務器提出了級沖CGI的概念。緩沖CGI亦稱為WinCGI。此時CGI擴展程序與服務器間通過結沖CGI而不是標準 CGI進行通訊,而緩沖CGI與服務器間的通訊還是通過標準CGI接口。后者由WWW服務器的內置緩沖處理程序實現。 緩沖CGI的工作原理與標準CGI相似,不同的是當服務器守護進程接收到客戶端的CGI請求時,所建立的CGI子進程將CGI請求的有關數據設置成環境變量外,還將它們保存在輸出緩沖區中;通過緩沖處理程序在外部CGI程序與服務器間建立兩條數據通道(輸入/輸出緩沖區)。CGI子進程通過輸出緩沖區將處理結果傳遞給服務器守護進程。 此處外部CGI程序通過環境變量和輸入/輸出緩沖區與WWW服務器進行通訊,傳遞有關參數和處理結果。此處環境變量的意義同上,不過這些環境變量及其相應值保存在輸出緩沖區用來豐放擴展程序的處理結果。 (3)標準CGI與緩沖CGI的區別 對CGI擴展程序而言,最主要差別在于數據的輸入/輸出方式不同:對緩沖CGI,服務器CGI擴展程序間的數據交換是通過緩沖區;而標準CGI是通過標準輸入/輸出(即stdin和stdout)。 使用緩沖CGI可選擇更多的開發工具,可以開發Windows95和WindowsNT下的CGI擴展程序;而使用標準CGI所選用的開發工具必須支持標準I/O。只有少數幾種WWW服務器支持緩沖CGI,因此基于它的擴展程序兼容性不如標準CGI好。
|