95后程序員可能不知道的
靜態(tài)網(wǎng)頁
時(shí)代很多很多年以前,那時(shí)候上網(wǎng)還用調(diào)制解調(diào)器,它可以把電腦傳過來的數(shù)字信號(hào)調(diào)制成電話線可以傳輸?shù)哪M信號(hào)發(fā)送出去,再把收到的模擬信號(hào)解調(diào)成數(shù)字信號(hào),通過RJ45接口連接的網(wǎng)線送給計(jì)算機(jī)。
那時(shí)候網(wǎng)速還只有幾十KB/s,網(wǎng)頁都是靜態(tài)文件,沒有太多圖片,大都是一些花花綠綠的文字。
那時(shí)的web服務(wù)器的工作也很簡(jiǎn)單,把靜態(tài)的網(wǎng)頁文件通過HTTP協(xié)議發(fā)送給瀏覽器就完事兒了。
CGI時(shí)代
后來,人們開始覺得乏味,靜態(tài)的網(wǎng)頁太過單調(diào)無聊,每個(gè)人看到的都是一樣的網(wǎng)頁,有沒有辦法在服務(wù)器端動(dòng)態(tài)處理用戶的請(qǐng)求來輸出不同的內(nèi)容,做到每個(gè)人看到的都是不同呢?
人們很自然想到了一個(gè)解決辦法:用編程語言編寫程序來處理這些請(qǐng)求,然后讓這些程序和web服務(wù)器想個(gè)辦法聯(lián)動(dòng)起來。
于是,一個(gè)叫通用網(wǎng)關(guān)接口CGI的技術(shù)被搗鼓了出來,CGI是一套標(biāo)準(zhǔn)規(guī)范,它約定了web服務(wù)器和服務(wù)擴(kuò)展程序之間的交互協(xié)議,有了它,web服務(wù)器插上了翅膀,可以動(dòng)態(tài)處理網(wǎng)頁瀏覽請(qǐng)求了。
第一個(gè)吃螃蟹的是Perl,隨后C/C++下場(chǎng)。
- int main() {
- printf("<html>\n");
- printf("<body>\n");
- printf("<h1>hello, %s!</h1>\n", user_ip);
- printf("</body>\n");
- printf("</html>\n");
- return 0;
- }
當(dāng)web服務(wù)器收到的請(qǐng)求是一個(gè)CGI程序負(fù)責(zé)的范圍時(shí),web服務(wù)器負(fù)責(zé)啟動(dòng)這個(gè)CGI程序,通過命令行參數(shù)、環(huán)境變量、輸入輸出等方式和CGI進(jìn)程保持聯(lián)系。
動(dòng)態(tài)網(wǎng)頁時(shí)代
這套技術(shù)很快流行了起來,原來靜態(tài)的網(wǎng)站用上了CGI技術(shù)后,都變得不再呆板了。
CGI大行其道,但同時(shí),也暴露了一個(gè)問題:
每次請(qǐng)求都要去啟動(dòng)一個(gè)進(jìn)程來處理,CGI進(jìn)程啟動(dòng)慢,還要初始化,這要是大量請(qǐng)求過來,那可就頂不住了。
于是,聰明的大牛們經(jīng)過一陣優(yōu)化,搞了一個(gè)CGI的升級(jí)版出來:FastCGI。
CGI采用主從模式,從進(jìn)程負(fù)責(zé)干活,主進(jìn)程負(fù)責(zé)和Web服務(wù)器打交道以及請(qǐng)求的派發(fā)管理。主進(jìn)程常駐,提前啟動(dòng)幾個(gè)工作進(jìn)程,不必每次都啟動(dòng)和初始化,大大提升了效率。
互聯(lián)網(wǎng)的快速發(fā)展讓人意想不到,CGI進(jìn)程中的業(yè)務(wù)邏輯越來越重,急需要一個(gè)更適合的編程語言來編寫這種web后端程序,而這個(gè)時(shí)候,Perl開始式微,C/C++操作字符串又很麻煩。
所謂時(shí)勢(shì)造英雄,有三顆新星開始冒了出來:PHP、ASPX、和JSP,分別在后端使用PHP、C#、Java語言來開發(fā),Web后端開發(fā)的三國(guó)殺時(shí)代開啟了!
通過printf或其他輸出方法來動(dòng)態(tài)生成HTML畢竟太麻煩了,PHP、ASPX和JSP都選擇了另外一條路:動(dòng)態(tài)裝配。
在網(wǎng)頁內(nèi)容HTML模板中需要?jiǎng)討B(tài)變化的位置插入一些擴(kuò)展的標(biāo)簽,這些標(biāo)簽是瀏覽器無法識(shí)別的,它不屬于超文本標(biāo)記語言HTML的規(guī)范,web后端處理程序通過識(shí)別這些標(biāo)簽,進(jìn)行數(shù)據(jù)裝配動(dòng)態(tài)生成最后的HTML文件:
通過這種方式,web后端發(fā)展進(jìn)入了快車道,各種功能強(qiáng)大五彩繽紛的網(wǎng)站紛紛誕生。
這是一個(gè)屬于動(dòng)態(tài)網(wǎng)頁的時(shí)代!
前后端分離
輝煌持續(xù)了數(shù)年,變局開始出現(xiàn)。
動(dòng)態(tài)網(wǎng)頁技術(shù),后端開發(fā)人員既要負(fù)責(zé)業(yè)務(wù)邏輯,還要學(xué)習(xí)前端技術(shù),精力被分散。
前端技術(shù)發(fā)展迅猛,日新月異,后端開發(fā)疲于應(yīng)對(duì)。
后來,移動(dòng)互聯(lián)網(wǎng)興起,各大網(wǎng)站紛紛布局移動(dòng)APP,加劇了前端與后端的技術(shù)分化。
于是,前后端分離開發(fā)的口號(hào)被響亮的喊了出來。
后端負(fù)責(zé)業(yè)務(wù)邏輯, 前端、Android端、iOS端各自負(fù)責(zé)交互與展示。
只要定義好數(shù)據(jù)接口,各方統(tǒng)一行事,一個(gè)后端,多個(gè)終端的時(shí)代到來。
分離后的前后端,各自開始起飛。
前端,從早期的JQuery、BootStrap為代表的“庫”時(shí)代到后來的AngularJS、React、VUE三強(qiáng)爭(zhēng)霸的框架腳手架時(shí)代,前端技術(shù)徹底放飛自我。
后端,隨著互聯(lián)網(wǎng)規(guī)模的不斷發(fā)展,緩存技術(shù)、數(shù)據(jù)庫、消息隊(duì)列、負(fù)載均衡、容器技術(shù)等一系列技術(shù)層出不窮。
現(xiàn)在的后端開發(fā),和當(dāng)初CGI程序所扮演的角色早已不可同日而語。
你是什么時(shí)候成為了程序員,又經(jīng)歷過web開發(fā)的哪些時(shí)代呢?
小心別暴露了年齡~
本文轉(zhuǎn)載自微信公眾號(hào)「編程技術(shù)宇宙」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系編程技術(shù)宇宙公眾號(hào)。