這篇文章適合沒有任何基礎的朋友看,有基礎的大佬移步python文檔
為什么要用cgi航唆?
在web發(fā)展的初期胀蛮,網(wǎng)頁都是靜態(tài)的。為了使用動態(tài)網(wǎng)頁糯钙,就產(chǎn)生了技術--cgi
什么是靜態(tài)網(wǎng)頁粪狼,什么是動態(tài)網(wǎng)頁退腥?
- 靜態(tài)網(wǎng)頁:所有人得到的頁面都是相同的
- 動態(tài)網(wǎng)頁:如購物網(wǎng)站,每個人購物車里的東西都不一樣
cgi如何做到靜態(tài)轉動態(tài)再榄?
前端通過表單等可以向web服務器(比如apache)發(fā)送一個url狡刘,以及格外的參數(shù)(get或post等請求類型及其參數(shù),服務器的信息等)困鸥。在Apache開啟了cgi模塊后嗅蔬,可以將上面的這些數(shù)據(jù)發(fā)送給cgi程序,這個程序可以是各種語言(c語言c++等)疾就。程序可以解析出具體參數(shù)澜术,然后輸出內(nèi)容響應給前端頁面。
——————————————————————————————————
看不懂上面的沒關系猬腰,先看看下面的基礎知識再返回來琢磨
網(wǎng)站到底是怎么發(fā)送數(shù)據(jù)的鸟废?
1.用戶在瀏覽器中輸入要訪問的域名地址
2.通過一系列解析與web服務器建立一條TCP連接通道,之后瀏覽器向web服務器發(fā)送一條HTTP請求報文姑荷。
3.web服務器響應并讀取瀏覽器的請求信息盒延,發(fā)送給應用服務器
4.應用服務器返回消息給web服務器,web服務器返回一條HTTP響應報文給瀏覽器
有的網(wǎng)站因為流量小鼠冕,不使用web服務器添寺,直接發(fā)送數(shù)據(jù)給應用服務器。
可以參考:例子
用戶訪問瀏覽器完整過程供鸠,查看第四點
——————————————————————————————————
apache畦贸,nginx這些服務器,是靜態(tài)服務器楞捂,也就是說薄坏,只能把本地的現(xiàn)成的html,css之類的東西傳給瀏覽器寨闹。如果需要經(jīng)過一些程序處理后返回數(shù)據(jù)給瀏覽器胶坠,那么服務器上的這個過程就叫cgi,程序就是cgi程序繁堡。如果沒有cgi的話沈善,我們就無法訪問到后面的應用服務器,只能返回一些本地現(xiàn)成的靜態(tài)數(shù)據(jù)椭蹄。
cgi的概念
CGI是外部應用程序(CGI程序)與WEB服務器之間的接口標準闻牡,是在CGI程序和Web服務器之間傳遞信息的過程。
cgi腳本工作流程
1.瀏覽器通過HTML表單或超鏈接請求指向一個CGI應用程序的URL绳矩。
2.服務器收到請求罩润。
3.服務器執(zhí)行所指定的CGI應用程序。
4.CGI應用程序執(zhí)行所需要的操作翼馆,通常是基于瀏覽者輸入的內(nèi)容割以。
5.CGI應用程序把結果格式化為網(wǎng)絡服務器和瀏覽器能夠理解的文檔(通常是HTML網(wǎng)頁)金度。
6.網(wǎng)絡服務器把結果返回到瀏覽器中。
參考資料:
Web是怎么工作的: CGI腳本
如何理解 CGI, WSGI严沥?
網(wǎng)關協(xié)議學習:CGI猜极、FastCGI、WSGI
Web 服務器與應用服務器的區(qū)別是什么消玄?
用戶訪問網(wǎng)站的完整流程
Python CGI編程