1.Web概述
什么是web?
web在計(jì)算機(jī)網(wǎng)頁(yè)開(kāi)發(fā)中就是網(wǎng)頁(yè)的意思,網(wǎng)頁(yè)是網(wǎng)站中的一個(gè)頁(yè)面。通常我們?yōu)g覽網(wǎng)頁(yè)時(shí),看到的都是
一個(gè)一個(gè)的html格式的web頁(yè)面,網(wǎng)頁(yè)可以展示文字,圖片,媒體等內(nèi)容,而這些都是需要通過(guò)瀏覽器來(lái)
閱讀的。
Web應(yīng)用程序的工作原理?
Web應(yīng)用程序大體可以分為兩種,靜態(tài)網(wǎng)站和動(dòng)態(tài)網(wǎng)站。
早期的Web應(yīng)用主要是靜態(tài)頁(yè)面的瀏覽,即靜態(tài)網(wǎng)站。這些網(wǎng)站使用HTML描寫(xiě),通常來(lái)說(shuō)隨著html代碼的
生成,頁(yè)面的內(nèi)容和顯示效果就基本上不會(huì)發(fā)生變化了——除非你修改頁(yè)面代碼。這些代碼放在Web服務(wù)器上,用戶(hù)使用瀏覽器通過(guò)HTTP協(xié)議請(qǐng)求服務(wù)器上的Web頁(yè)面,服務(wù)器上的Web服務(wù)
器接受到用戶(hù)的請(qǐng)求處理后,再發(fā)送給客戶(hù)端瀏覽器,顯示給用戶(hù)。整個(gè)過(guò)程就像下圖:
而動(dòng)態(tài)網(wǎng)頁(yè)則不然,頁(yè)面代碼雖然沒(méi)有變,但是顯示的內(nèi)容卻是可以隨著時(shí)間、環(huán)境或者數(shù)據(jù)庫(kù)操作的結(jié)果而發(fā)生改變的。這些網(wǎng)站通常使用HTML和動(dòng)態(tài)腳本語(yǔ)言(入JSP、ASP或者是PHP等)編寫(xiě),并將編寫(xiě)后的程序部署到Web服務(wù)器上,由Web服務(wù)器對(duì)動(dòng)態(tài)腳本代碼進(jìn)行處理,并轉(zhuǎn)化成瀏覽器可以解析的HTML代碼,返回給客戶(hù)端瀏覽器,顯示給用戶(hù)。
值得一提的是:動(dòng)態(tài)網(wǎng)頁(yè)并非是那些帶有動(dòng)畫(huà)效果的網(wǎng)頁(yè),而是指具有交互性、內(nèi)容可以自動(dòng)更新,并且內(nèi)容會(huì)根據(jù)訪問(wèn)的時(shí)間和訪問(wèn)者而改變的網(wǎng)頁(yè)。這里所說(shuō)的交互性是指網(wǎng)頁(yè)可以根據(jù)用戶(hù)的要求動(dòng)態(tài)改變或響應(yīng)。由此可見(jiàn),靜態(tài)網(wǎng)頁(yè)就像是老式的手機(jī),只能使用系統(tǒng)自帶的鈴聲和功能,而動(dòng)態(tài)網(wǎng)頁(yè)就像是現(xiàn)代的手機(jī),可以自行添加/刪除或者說(shuō)更改鈴聲和其他一些設(shè)置。
2,Web的發(fā)展歷程
自從1989年由Tim Berners-Lee(蒂姆.伯納斯.李)發(fā)明了World Wide Web以來(lái),Web主要經(jīng)歷了3個(gè)階段,分別是靜態(tài)文檔階段(指代Web 1.0)、動(dòng)態(tài)網(wǎng)頁(yè)階段(指代Web1.5)和Web2.0階段。
① 靜態(tài)文檔階段
處理靜態(tài)文檔階段的 Web ,主要是用于靜態(tài) Web 頁(yè)面的瀏覽。用戶(hù)通過(guò)客戶(hù)端的 Web 瀏覽器可以訪問(wèn) Internet 上各個(gè) Web 站點(diǎn)。在每個(gè) Web 站點(diǎn)上,保存著提前編寫(xiě)好的 HTML 格式的 Web 頁(yè),以及各 Web 頁(yè)之間可以實(shí)現(xiàn)跳轉(zhuǎn)的超文本鏈接。
通常情況下,這些 Web 頁(yè)都是通過(guò) HTML 語(yǔ)言編寫(xiě)的。由于受低版本 HTML 語(yǔ)言和舊式瀏覽器的制約,Web 頁(yè)面只能包括單純的文本內(nèi)容,瀏覽器頁(yè)只能顯示呆板的文字信息,不過(guò)這已經(jīng)基本滿(mǎn)足了建立 Web 站點(diǎn)的初衷,實(shí)現(xiàn)了信息資源共享。
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展以及網(wǎng)上信息呈幾何倍數(shù)的增長(zhǎng),人們逐漸發(fā)現(xiàn)手工編寫(xiě)包含所有信息和內(nèi)容的頁(yè)面,對(duì)人力和物理都是一種極大的浪費(fèi),而且?guī)缀踝兊秒y以實(shí)現(xiàn)。另外,這樣的頁(yè)面也無(wú)法實(shí)現(xiàn)各種動(dòng)態(tài)的交互功能。這就促使了 Web 技術(shù)進(jìn)入了發(fā)展的第二階段——動(dòng)態(tài)網(wǎng)頁(yè)階段。
② 動(dòng)態(tài)網(wǎng)頁(yè)階段
為了克服靜態(tài)頁(yè)面的不足,人們將傳統(tǒng)單機(jī)環(huán)境下的編程技術(shù)與 Web 技術(shù)相結(jié)合,從而形成新的網(wǎng)絡(luò)編程技術(shù)。網(wǎng)絡(luò)編程技術(shù)通過(guò)在傳統(tǒng)的靜態(tài)網(wǎng)頁(yè)中加入各種程序和邏輯控制,從而實(shí)現(xiàn)動(dòng)態(tài)和個(gè)性化的交流與互動(dòng)。我們將這種使用網(wǎng)絡(luò)編程技術(shù)創(chuàng)建的頁(yè)面稱(chēng)為動(dòng)態(tài)頁(yè)面。動(dòng)態(tài)頁(yè)面的后綴通常是.jsp、.php、和.asp等,而靜態(tài)頁(yè)面的后綴通常是.htm、.html和.shtml等。
③ Web 2.0 階段
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,又提出了一種新的互聯(lián)網(wǎng)模式——Web 2.0。這種模式更加以用戶(hù)為中心,通過(guò)網(wǎng)絡(luò)應(yīng)用( Web Applications )促進(jìn)網(wǎng)絡(luò)上人與人間的信息交換和協(xié)同合作。
Web 2.0 技術(shù)主要包括:博客( BLOG )、微博( Twitter )、維基百科全書(shū)( Wiki )、即時(shí)信息( IM )等。
3.網(wǎng)絡(luò)程序開(kāi)發(fā)的體系結(jié)構(gòu)
隨著web2.0時(shí)代的到來(lái),互聯(lián)網(wǎng)的網(wǎng)絡(luò)架構(gòu)已從傳統(tǒng)的C/S架構(gòu)轉(zhuǎn)變?yōu)楦臃奖恪⒖旖莸腂/S架構(gòu),B/S架構(gòu)大大簡(jiǎn)化了使用網(wǎng)絡(luò)應(yīng)用的難度,這種人人都能上網(wǎng)、人人都能使用網(wǎng)絡(luò)上提供的服務(wù)的方法也進(jìn)一步推到了網(wǎng)絡(luò)的繁榮。
可以通過(guò)一個(gè)例子來(lái)理解C/S和B/S。
C/S比如就是一些桌面應(yīng)用,例如qq這種運(yùn)行在桌面的程序,服務(wù)端主要就是一個(gè)數(shù)據(jù)庫(kù),把所有業(yè)務(wù)邏輯以及界面的渲染操作都交給客戶(hù)端去完成。
而B(niǎo)/S對(duì)應(yīng)的就是我們的瀏覽器,把業(yè)務(wù)邏輯交給服務(wù)端完成,客戶(hù)端僅僅只用來(lái)渲染界面和數(shù)據(jù)交換。
B/S架構(gòu)帶來(lái)了以下兩個(gè)方面的好處:
(1)客戶(hù)端統(tǒng)一使用瀏覽器,由于瀏覽器具有統(tǒng)一性,它不需要特殊的配置和網(wǎng)絡(luò)連接,有效的屏蔽了不同服務(wù)商提供給用戶(hù)使用服務(wù)的差異性。
(2)瀏覽器的驕傲胡特性使得用戶(hù)使用起來(lái)非常簡(jiǎn)便,一通百通。服務(wù)端(Server)基于統(tǒng)一的HTTP協(xié)議,和傳統(tǒng)的C/S使用自己不同的自定義應(yīng)用層比簡(jiǎn)化了很多。使得服務(wù)器開(kāi)發(fā)者可以采用相對(duì)規(guī)范的開(kāi)發(fā)模式,這樣可以大大節(jié)省開(kāi)發(fā)成本,由于使用統(tǒng)一的HTTP,所以基于HTTP的服務(wù)器就有很多,如IIS、Tomcat等,這些服務(wù)器可以直接拿來(lái)使用,不需要服務(wù)開(kāi)發(fā)者單獨(dú)開(kāi)發(fā)。不僅如此,連開(kāi)發(fā)服務(wù)的通用框架和平臺(tái)都可以直接拿來(lái)使用,只需要專(zhuān)注業(yè)務(wù)邏輯即可,也正因?yàn)锽/S框架簡(jiǎn)化了服務(wù)器提供者的開(kāi)發(fā)過(guò)程,也促進(jìn)了更多的互聯(lián)網(wǎng)服務(wù)出現(xiàn)。
CDN架構(gòu)圖:
B/S網(wǎng)絡(luò)架構(gòu)概述
B/S網(wǎng)絡(luò)架構(gòu)從前端到后端都得到了簡(jiǎn)化,基于統(tǒng)一的應(yīng)用層協(xié)議HTTP來(lái)交互數(shù)據(jù),與大多數(shù)傳統(tǒng)C/S互聯(lián)網(wǎng)應(yīng)用程序采用的長(zhǎng)連接的交互模式不同,HTTP采用的是無(wú)狀態(tài)的短連接的通信方式,通常情況下,一次請(qǐng)求就完成了一次數(shù)據(jù)交互,通常也對(duì)應(yīng)一個(gè)業(yè)務(wù)邏輯,然后這次通信連接就斷開(kāi)了。采用這種方式是為了能夠同時(shí)服務(wù)更多的用戶(hù),因?yàn)楫?dāng)前互聯(lián)網(wǎng)應(yīng)用每天都會(huì)處理上億的用戶(hù)請(qǐng)求,不可能對(duì)每個(gè)用戶(hù)的某一次訪問(wèn)一直保持這個(gè)連接。
基于HTTP本身的特點(diǎn),目前的B/S網(wǎng)絡(luò)架構(gòu)大多采用CDN的架構(gòu)設(shè)計(jì)(如上圖),既要滿(mǎn)足海量請(qǐng)求,也要保持快速響應(yīng),所以現(xiàn)在的網(wǎng)絡(luò)架構(gòu)會(huì)越來(lái)越復(fù)雜。
當(dāng)一個(gè)用戶(hù)在瀏覽器地址欄中輸入一個(gè)URL時(shí),將會(huì)發(fā)生很多操作。首先它會(huì)請(qǐng)求DNS把這個(gè)域名解析為對(duì)應(yīng)的IP地址,然后根據(jù)這個(gè)IP地址在互聯(lián)網(wǎng)商找到對(duì)應(yīng)的服務(wù)器,向這個(gè)服務(wù)器發(fā)起一個(gè)get請(qǐng)求,由這個(gè)服務(wù)器決定返回默認(rèn)的數(shù)據(jù)資源給訪問(wèn)的用戶(hù)。在服務(wù)端實(shí)際上還有很復(fù)雜的業(yè)務(wù)邏輯:服務(wù)器可能會(huì)有很多臺(tái),到底指定哪一個(gè)服務(wù)器來(lái)處理請(qǐng)求,這需要一個(gè)負(fù)載均衡設(shè)備來(lái)平均分配所有用戶(hù)的請(qǐng)求還有請(qǐng)求的數(shù)據(jù)是存儲(chǔ)在分布式緩存里還是一個(gè)靜態(tài)文件中,或是在數(shù)據(jù)庫(kù)里;當(dāng)數(shù)據(jù)返回瀏覽器時(shí),瀏覽器解析數(shù)據(jù)發(fā)現(xiàn)還有一些靜態(tài)資源(如CSS,JS或者圖片)時(shí)又會(huì)發(fā)起另外的HTTP請(qǐng)求,而這些請(qǐng)求很可能會(huì)在CDN上,那么CDN服務(wù)器又會(huì)處理這個(gè)用戶(hù)的請(qǐng)求,大體上一個(gè)用戶(hù)請(qǐng)求會(huì)設(shè)計(jì)這么多的操作,每一個(gè)細(xì)節(jié)都會(huì)影響這個(gè)請(qǐng)求最終是否會(huì)成功。
無(wú)論網(wǎng)絡(luò)架構(gòu)如何變化,始終有一些固定不變的原則需要遵守。
互聯(lián)網(wǎng)上的所有資源都要用一個(gè)URL來(lái)表示,URL就是同意資源定位符,如果你要發(fā)布一個(gè)服務(wù)或者一個(gè)資源到互聯(lián)網(wǎng)上,讓別人能夠訪問(wèn)到,那么你首先必須要有一個(gè)在世界上獨(dú)一無(wú)二的URL,不要小看這個(gè)URL,他幾乎包含了整個(gè)互聯(lián)網(wǎng)的架構(gòu)精髓。
必須基于HTTP與服務(wù)端交互,不管你訪問(wèn)的是國(guó)內(nèi)的還是國(guó)外的數(shù)據(jù),是文本數(shù)據(jù)還是流媒體,都必須按照套路出牌,也就是都要采用統(tǒng)一的打招呼方式,這樣人家才能明白你要的是什么。
數(shù)據(jù)展示必須在瀏覽器中進(jìn)行,當(dāng)你獲得數(shù)據(jù)資源后,必須在瀏覽器上才能使其恢復(fù)原貌。
只要滿(mǎn)足以上幾點(diǎn),基本上一個(gè)互聯(lián)網(wǎng)應(yīng)用就正確運(yùn)行起來(lái)了,當(dāng)然這中間包含了很多細(xì)節(jié)。