??? ??? ?? ????? ??? ?????. ??? ??? ????.
????? ??? ?? ?? ???? ????? ?????.
?????? ??? ??? Nginx? ???? ??? ?????? Nginx? ??? CGI? ???? ?? ??? ??? ? ?? ? ???
?????.
? ??. 一請法兒
?? CGI? WebServer? ??? ??? ? ?? ??? ??????? ??? ?????.
CGI
? ???? Nginx
? ???????? ?????. ?? ???? ???? ????? Nginx
?? WebServer
? ?????. 為什么CGI與WebServer不能互相替代?
因為CGI
是一種標(biāo)準(zhǔn),Nginx
則是一種應(yīng)用。兩者不是同類,所以下面用WebServer
代替Nginx
。
CGI
是一種標(biāo)準(zhǔn),Nginx
則是一種應(yīng)用。
從瀏覽器
的角度來看,瀏覽器只負責(zé)發(fā)送請求,接收來自WebServer
的返回結(jié)果并渲染之。對于WebServer
來講,它需要做的僅僅是接收請求,尋找瀏覽器
請求的文件并且發(fā)送回去。如果僅僅是這樣,世界就很完美了。
但是后來發(fā)生的事情大家都知道了。。我們不光要瀏覽靜態(tài)網(wǎng)頁,我們還要登陸論壇、發(fā)帖罵人灌水踩答案點贊刷聲望等等。這些行為是靜態(tài)的Html沒法完成的。所以有了JS、Flash等等基于前端的交互技術(shù)。WebServer
把包含了這些代碼的文件發(fā)給瀏覽器
,后者把它解析稱它應(yīng)該有的樣子(或者不應(yīng)該有的樣子,比如IE6),我們可以在頁面上看看動畫什么的,這些稱之為前段交互技術(shù)。
但是有些交互前端做不了, 比如我上次發(fā)了一個高清無碼套圖,我要看到大家的反應(yīng),點個贊啊樓主好人啊之類的,那么這個技術(shù)就要用到數(shù)據(jù)庫,但是數(shù)據(jù)庫本身是需要另外一種語言來操作的,這種語言可以是python、prel、Ruby、PHP等等,我們稱之為動態(tài)語言
。他們對數(shù)據(jù)庫進行增刪查改四大操作,并且返回結(jié)果給WebServer
,后者再傳給瀏覽器。
由于有很多動態(tài)語言和很多種Web服務(wù)器,他們彼此之間互不兼容,給程序員造成了很大的麻煩。那么,CGI
應(yīng)運而僧。CGI
的定義是統(tǒng)一網(wǎng)關(guān)接口。從此WebServer
收到后臺動態(tài)交互請求就直接發(fā)給CGI
,CGI
發(fā)給動態(tài)語言,動態(tài)語言把結(jié)果發(fā)回給CGI
,CGI
再發(fā)回給WebServer
,后面的事情你都清楚了。。。。
那么結(jié)論就是,CGI
是一個翻譯層,它的功能不是直接提供結(jié)果給瀏覽器,而是翻譯來自WebServer的請求并轉(zhuǎn)給后臺的應(yīng)用程序,并且把執(zhí)行結(jié)果翻譯成靜態(tài)網(wǎng)頁返回給WebServer
CGI
? ???? Nginx
? ?????????.
????
? ???? ? ? ????? ??? ??? WebServer
?? ?? ??? ???? ????? ??? ?????. WebServer
? ?? ??? ???? Browser
?? ??? ??? ??? ?? ???? ?? ???. ??? ??? ??? ??? ???.
WebServer
? ??? ??? ??? ??? Browser
? ???, ????? ?? ??? ??? ???(?? IE6?? ???? ? ?? ??) ?????. ???? ????? ?? ?????. ?? ????? ???? ????? ???. #????#
??? ? ? ?? ????? ??? ??? ????. ?? ?? ???? ??? ??? ??? ????, ???? ?? ?? ???? ? ?? ???? ??? ?? ????. ??????? ????? ?????? ??? ???? ?? ?? ??? ??? ?? Python, prel, Ruby, PHP ?? ? ? ????. ??? ?? ?? ??
?? ????. ??????? ??, ??, ?? ? ???? ? ?? ?? ??? ???? ??? WebServer
? ??? ?? ????? ?????. #????#
#????#?? ??? ??, ??? ??? ???? ??? ?? ???? ?? ???????? ?? ??? ?????. ???? CGI
? ??????. CGI
? ??? ?? ????? ????????. ? ???? WebServer
? ????? ?? ?? ?? ??? ?? CGI
? ?? ????. CGI
? ?? ?? ??? ??? ?? ??? ????. ??? CGI
, CGI
? ?? ?? ?? WebServer
? ?? ??? ??? ?? ?? ???? ? ? ????. . . . #????#
#????#??? CGI
? ?? ????? ????. ? ??? ????? ?? ??? ???? ?? ??? WebServer? ??? ???? ????? ??????? ???? ????. ?? ??? ?? ? ???? ???? WebServer
? ????? ?? ??? ??????. #????#
#????#??? ??? ??? ??? ???? ?? ??? ?? ?? ?????. #????#?? ??? ????? ?? ???? ? nginx? ?? ??? ??? ? ?? ? ????
????? ? ?? ?? ??? HTTP ???????. ????? CGI/FastCGI ????? ???? ?? ??? Nginx? ??? FPM, PHP-CGI ?? ?? ???? ?? ??????.
Nginx? ????? ? ?????. CGI? ?? ???? ? CGI? ? ??? ?? ??? ???????.
CGI? ?? ??? ???? ?? ????.
? ??? ?? ??? ?? ?? ??? ???? ?? ??(????? HTML ??? ?? ??? ?? ?? ??)?? ?????. ?? ??? ??? CGI? ?????. ?? ?? ??? ??? ?? ?? ????.
Nginx? ????? ????? ???. ?? ??? ? ??? ?? ? ??? ? ??? ???
??? ?? ?? ???? ?? ?? ?? ?? ???? ?????.
??? ? ??? ??? ???? ??? ?? ?? ????? ??? ??? ?,
?? ?? ???? ?? ? ??? ?????? ??? ?? ????.
Nginx? ??? ??? ??? ??? 4?? ?? ? ? ?? ??? ??? ? ?? ???? ???? ????
?? ??? ????? ??? ?? nginx? ?????.
?? ??? ?? nginx? ??? ??? ?????. CGI? ?? ???? ?? ???? ???? ???.