知識(shí)庫
CGI是什么?百度百科里面講過,CGI是通用網(wǎng)關(guān)接口(Common Gateway Interface/CGI)是一種重要的互聯(lián)網(wǎng)技術(shù),CGI描述了服務(wù)器和請求處理程序之間傳輸數(shù)據(jù)的一種標(biāo)準(zhǔn)。CGI應(yīng)用程序 能通過Web服務(wù)器與瀏覽器進(jìn)行交互,還可以通過數(shù)據(jù)庫API與數(shù)據(jù)庫服務(wù)器等外部數(shù)據(jù)源進(jìn)行通信。
從數(shù)據(jù)庫服務(wù)器中獲取數(shù)據(jù),將數(shù)據(jù)格式化為HTML文檔后,發(fā)送給瀏覽器,可以讓一個(gè)客戶端,從網(wǎng)頁瀏覽器向執(zhí)行在網(wǎng)絡(luò)服務(wù)器上的程序請求數(shù)據(jù)。也可以將從瀏覽器獲得的數(shù)據(jù)放到數(shù)據(jù)庫中。
海外服務(wù)器免費(fèi)測試:http://www.ukunilife.com/cloud/usa.html
也就是說,所有Web服務(wù)器都支持CGI,我們可用多種語言編寫CGI(包括流行的C、C ++等),只要這種語言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。
什么是cgi 程序?
放置在服務(wù)器上的一段可執(zhí)行程序。作為HTTP服務(wù)器的時(shí)候,客戶端可以通過GET或者POST請求來調(diào)用這可執(zhí)行程序。
CGI的作用
CGI在web服務(wù)的業(yè)務(wù)開展中,是橋梁的作用,有著數(shù)據(jù)轉(zhuǎn)化以及傳輸?shù)淖饔谩⑦€有著保存用戶信息以及上傳的作用,還能在客戶搜索的時(shí)候提供一個(gè)小型數(shù)據(jù)庫的作用。這些功能在大家的業(yè)務(wù)開展中是不可缺少的。
CGI客戶端請求服務(wù)端的交互流程:
第1步、前端通過表單可以向服務(wù)器發(fā)送一個(gè)URL;
第2步、服務(wù)器獲取到很多參數(shù)(get或post請求的參數(shù)、服務(wù)器和客服端的信息,cookie等等);
第3步、服務(wù)器開啟CGI模塊將參數(shù)存到環(huán)境變量中,并調(diào)用一個(gè)CGI程序;
第4步、CGI程序從環(huán)境變量中解析出這樣請求的具體參數(shù),向標(biāo)準(zhǔn)輸出輸出內(nèi)容,發(fā)送到了你的瀏覽器;
第5步、瀏覽器收到http請求,解析html代碼,然后渲染出了網(wǎng)頁。
舉個(gè)栗子:當(dāng)我們搭建好一臺(tái)web服務(wù)器,網(wǎng)站已經(jīng)上線,但用戶是不可能直接進(jìn)入到我們的web服務(wù)器內(nèi)的。假設(shè)用戶直接進(jìn)入到WEB服務(wù)器內(nèi)的話不但用戶訪問數(shù)據(jù)消耗的時(shí)間增多,而且對于服務(wù)器來說也很不安全,所以就需要有一個(gè)載體在網(wǎng)絡(luò)中實(shí)時(shí)顯示web服務(wù)器上的文件數(shù)據(jù),也就是瀏覽器。而存儲(chǔ)在web服務(wù)器內(nèi)的數(shù)據(jù)就是通過CGI轉(zhuǎn)換傳輸?shù)絯eb瀏覽器上去并顯示出來的,所以CGI這個(gè)應(yīng)用程序就是在大家開展業(yè)務(wù)的過程中數(shù)據(jù)傳輸?shù)臉蛄骸?
CGI程序的優(yōu)點(diǎn):
除了在業(yè)務(wù)開展中傳輸數(shù)據(jù)的作用,在web服務(wù)的用戶訪問方面,因?yàn)閔tml無法直接記住客戶信息,而在業(yè)務(wù)開展的過程中是可以記錄用戶信息的,這也是CGI的功勞,所以CGI還可以很好的記住并把客戶的訪問信息傳輸?shù)絯eb服務(wù)器中去。讓大家能夠?qū)崟r(shí)查看到web服務(wù)的客戶訪問情況,并及時(shí)作出調(diào)整,以便于更好的開展web服務(wù)。其次還有許多html無法提供的功能都是通過CGI補(bǔ)充完美的,如可以當(dāng)作一個(gè)計(jì)數(shù)器、搜索程序、web數(shù)據(jù)庫等等。并且在編寫CGI應(yīng)用程序時(shí),CGI可以通過多種編寫語言來編寫,如C、C++、jave等等,讓大家不必在編寫CGI腳本方面特地的去學(xué)習(xí)某種語言。
使用的過程中CGI應(yīng)注意的幾個(gè)問題:
1、大量消耗服務(wù)端資源(一般執(zhí)行CGI腳本,要單獨(dú)開啟一個(gè)進(jìn)程執(zhí)行);
2、沒有做到前后端分層,前端不但要知道任務(wù)做什么,還要知道任務(wù)怎么做調(diào)用相應(yīng)CGI腳本,后端要返回組裝的html內(nèi)容;
3、如果CGI腳本有bug被利用,容易對服務(wù)器造成攻擊。
因?yàn)镃GI程序需要傳輸以及轉(zhuǎn)換文件格式,所以CGI程序的運(yùn)行也是需要占用cpu以及內(nèi)存的,所以大家在開展web服務(wù)的時(shí)候需要留出一定的空間,以供CGI程序運(yùn)行,否則用戶訪問過多的情況下,就可能導(dǎo)致WEB服務(wù)器的系統(tǒng)奔潰。其次不完善的CGI應(yīng)用程序還可能成為別人入侵您WEB服務(wù)器的進(jìn)攻渠道,造成一些不可挽回的損失。所以要保證CGI程序的完善,這樣能有效避免一些不必要的麻煩。