動態WEB技術CGI

CGI

CGI

CGI是什麼?

公共網關接口(Common Gateway Interface,CGI)是Web服務器運行時外部程序的規範,按CGI協議編寫的程序可以擴展服務器功能。<百度百科>

CGI是WEB服務器與其它主機上程序進行通信的一種工具,其中程序必須運行在網絡服務器上。即CGI實現了在網絡服務器下運行外部分應用程序(或網關)。

CGI的功能?

CGI應用程序能與瀏覽器進行交互,還可通過數據API與數據庫服務器等外部數據源進行通信,從數據庫服務器中獲取數據。格式化爲HTML文檔後,發送給瀏覽器,也可以將從瀏覽器獲得的數據放到數據庫中。

CGI是運行在Web服務器上的一個程序,並由來自於瀏覽者的輸人觸發。CGI是在HTTP服務器下運行外部程序(或網關)的一個接口,它能讓網絡用戶訪問遠程系統上的使用類型程序,就好像他們在實際使用那些遠程計算機一樣。CGI能夠讓瀏覽者與服務器進行交互,如果你曾經遇到過在網絡上填表或者進行搜索(動態處理web請求),就很有可能就是用的CGI。

CGI目的是能夠讓服務器能夠方便的調用外部程序。CGI本身是一套協議和規範,原則上只要是擁有讀寫文件功能的編程語言都可以用來編寫CGI程序,例如C,C++,Perl,Visual Basic,Shell等等,歷史上用來編寫CGI程序使用最廣泛的是Perl語言,連PHP一開始也是用Perl編寫的,估計也受這個傳統的影響。服務器在認爲這是一個CGI請求時,會調用相關CGI程序,並通過環境變量和標準輸出將數據傳送給CGI程序,CGI程序處理完數據,生成html,然後再通過標準輸出將內容返回給服務器,服務器再將內容交給用戶,CGI進程退出,在這個過程中,服務器的標準輸出對應了CGI程序的標準輸入,CGI程序的標準輸出對應着服務器的標準輸入,相當於利用兩條管道建立了進程間的通信。

CGI應用程序的工作原理:

1.瀏覽器通過HTML表單或超鏈接請求一個CGI應用程序的URL。

2.服務器收發到請求。

3.服務器執行指定請求的CGI應用程序(可能在WEB server主機處理,也能可能不在WEB server主機處理)。

4.CGI應用程序執行所需要的操作,通常是基於瀏覽者輸人的內容(與數據庫進行交互)。

5.CGI應用程序把結果格式化爲網絡服務器和瀏覽器能夠理解的文檔(通常是HTML網頁)。

6.WEB服務器把結果HTML構建爲響應報文返回到瀏覽器中。

CGI應用程序要注意:

CGI應用程序運行在瀏覽器可以請求的服務器系統上,執行時需要使用服務器CPU時間和內存。如果有成千上萬的這種程序會同時運行,那會對服務器系統提出極高的要求。需要慎重考慮這個問題,以防止服務器系統崩潰。

不完善的CGI應用程序可能成爲別人非法進人服務器系統的通道,有可能導致重要的資料被刪除或外泄。

CGI應用程序主要的用途有以下幾種:

  • 根據瀏覽者填寫的HTML表單發送定製的答覆。

  • 創建可單擊的圖像縮小圖。

  • 創建一個瀏覽者可以搜索內容的數據庫。

  • 提供服務器與數據庫的接口,並把結果轉換成HTML文檔。

  • 製作動態HTML文擋。

如果一個CGI腳本可以在每臺計算機上做同樣的事情;編寫腳本就會變的很容易。不幸的是,CGI腳本依賴於服務器的操作系統,因此,對於非UNIX服務器來說,Perl(UNIX下編寫腳本的一個常用工具)腳本毫無用處。所以,你必須定製安裝你的CGI腳本。

大多數服務器都提供CGI-BIN目錄,但是這還不夠。因爲你應該擁有自己的CGI-BIN。這樣,你就能運行自己的腳本(而不是讓自己的系統去適應已存在於系統上的腳本)。因此,你的提供商應安裝CGI-BIN,且能夠幫助你編寫腳本。

最後注:nginx不支持CGI,但nginx支持fastcgi

FastCGI

CGI協議雖然解決了語言解析器和Web server之間通訊的問題,但是它的效率很低,因爲web server每收到一個請求都會創建一個CGI進程,PHP解析器都會解析php.ini文件,初始化環境,請求結束的時候再關閉進程,對於每一個創建的CGI進程都會執行這些操作,所以效率很低,而FastCGI是用來提高CGI性能的,FastCGI每次處理完請求之後不會關閉掉進程,而是保留這個進程,使這個進程可以處理多個請求。這樣的話每個請求都不用再重新創建一個進程了,大大提升了處理效率。

FastCGI通信方式:在這裏插入圖片描述

什麼是PHP-FPM?

PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)是一個實現了Fastcgi的管理程序,並且提供進程管理的功能,進程包括master進程和worker進程,master進程只有一個,負責監聽端口,接受來自web server的請求。worker進程一般會有多個,每個進程中會嵌入一個PHP解析器,進行PHP代碼的處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章