用戶打開瀏覽器绎晃,輸入baidu.com赁豆,頁面展示百度首頁波附。整個過程發(fā)生了什么艺晴?
這是一個從URL輸入到頁面展現(xiàn)的過程昼钻。
名詞解釋:
- URL:統(tǒng)一資源定位符(Uniform Resource Locator,URL),用于定位互聯(lián)網(wǎng)上的資源并指出訪問方法封寞∪黄溃互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL,指出文件的位置以及瀏覽器應(yīng)該怎么處理它狈究。
- DNS:域名系統(tǒng)(Domain Name System)碗淌,因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng)抖锥,而不用去記住能夠被機器直接讀取的IP數(shù)串亿眠。通過主機名,最終得到該主機名對應(yīng)的IP地址的過程叫做域名解析(或主機名解析)磅废。每個IP地址都可以有一個主機名纳像,主機名由一個或多個字符串組成,字符串之間用小數(shù)點隔開还蹲。有了主機名爹耗,就不要死記硬背每臺IP設(shè)備的IP地址,只要記住相對直觀有意義的主機名就行了谜喊。這就是DNS協(xié)議所要完成的功能潭兽。
- ISP:互聯(lián)網(wǎng)服務(wù)提供商(Internet Service Provider),即向廣大用戶綜合提供互聯(lián)網(wǎng)接入業(yè)務(wù)斗遏、信息業(yè)務(wù)山卦、和增值業(yè)務(wù)的電信運營商。
- dom:文檔對象模型(Document Object Model诵次,簡稱DOM)账蓉,是W3C組織推薦的處理可擴展標(biāo)志語言的標(biāo)準(zhǔn)編程接口。在網(wǎng)頁上逾一,組織頁面(或文檔)的對象被組織在一個樹形結(jié)構(gòu)中铸本,用來表示文檔中對象的標(biāo)準(zhǔn)模型就稱為DOM。
1.在瀏覽器里輸入URL
用戶打開瀏覽器遵堵,輸入baidu.com箱玷。
2.域名解析
域名解析就是域名到IP地址的轉(zhuǎn)換過程。域名的解析工作由DNS服務(wù)器完成陌宿。即查找域名(baidu.com)網(wǎng)站所在服務(wù)器的IP地址锡足,域名解析的流程如下:
- 從瀏覽器緩存里找:瀏覽器會緩存之前用過的DNS一段時間(若無轉(zhuǎn)至下一步)。
- 從系統(tǒng)緩存里找:從Host文件查找是否有該域名對應(yīng)的IP(若無轉(zhuǎn)至下一步)壳坪。
- 從路由器緩存里找:從路由器中查找該域名IP地址的緩存信息(若無轉(zhuǎn)至下一步)舶得。
- 從ISP DNS緩存里找:從ISP(例如:電信)的DNS上查找該域名IP地址的緩存信息(若無轉(zhuǎn)至下一步)。
- 如以上方法都沒找到爽蝴,則向根域名服務(wù)器查找域名對應(yīng)的IP沐批,直到找到為止纫骑。
3.服務(wù)器處理
服務(wù)器是一臺安裝系統(tǒng)的機器。系統(tǒng)里安裝的處理請求的應(yīng)用叫Web server,用于接受用戶的請求珠插,返回給網(wǎng)站代碼惧磺。常見的web服務(wù)器有Apache、Nginx捻撑、IIS磨隘、Lighttpd。
瀏覽器把用戶發(fā)起的HTTP請求發(fā)送給服務(wù)器后顾患,Web server會在它自己的存儲空間中搜索所請求的文件(因為同一個服務(wù)器地址番捂,可能同時綁定了多個域名,此時需要配置web服務(wù)器將請求轉(zhuǎn)給相應(yīng)的端口)江解。當(dāng)找到文件時设预,服務(wù)器會讀取它,按需處理它犁河,并且把它傳送回瀏覽器鳖枕。Web server就相當(dāng)于起到了內(nèi)容分發(fā)的作用。
4.網(wǎng)站處理
網(wǎng)站處理桨螺,就是實際后臺處理的工作宾符。后臺開發(fā)有很多框架,但大部分是按照MVC設(shè)計模式進(jìn)行搭建的灭翔。MVC是一個設(shè)計模式魏烫,將應(yīng)用程序分成三個核心部件:模型(model)、視圖(view)肝箱、控制器(controller)哄褒。
控制器統(tǒng)一管理,接收服務(wù)器傳送過來的用戶請求并調(diào)用模型和視圖去完成用戶需求(決定調(diào)用哪個模型構(gòu)件去處理請求煌张,然后確定用哪個視圖來顯示模型處理返回的數(shù)據(jù))呐赡。如需查找所需用戶的數(shù)據(jù),便向模型要數(shù)據(jù)骏融,模型操作數(shù)據(jù)庫罚舱,查找所需數(shù)據(jù),找到后發(fā)回給控制器绎谦。視圖是HTML模板,把數(shù)據(jù)填入模板生成HTML粥脚,發(fā)回給控制器窃肠。控制器從模型中拿到數(shù)據(jù)刷允,然后從視圖中拿到HTML冤留,經(jīng)過處理碧囊,返回html字符串給瀏覽器。
5.瀏覽器處理
通過后臺處理返回的html字符串結(jié)果會被瀏覽器讀取解析纤怒,對應(yīng)的就是html頁面加載糯而、解析、渲染的工作泊窘。
(1)加載
瀏覽器對一個html頁面的加載順序是從上而下的熄驼,并在加載過程中進(jìn)行解析渲染處理。在這個過程中遇到link標(biāo)簽烘豹、image標(biāo)簽瓜贾、script標(biāo)簽時,瀏覽器會再次向服務(wù)器發(fā)送請求獲取css文件携悯、圖片資源祭芦、js文件,并執(zhí)行js代碼憔鬼,同步進(jìn)行加載解析龟劲。
(2)解析、渲染
解析的過程轴或,就是生成解析樹昌跌,即dom樹。dom樹是由dom元素及屬性節(jié)點組成侮叮,加上css解析的樣式對象和js解析后的動作實現(xiàn)避矢。而渲染,就是將dom樹進(jìn)行可視化表示囊榜。
6.繪制網(wǎng)頁
瀏覽器通過上面步驟計算得到渲染樹(dom樹的可視化表示)审胸,構(gòu)建渲染樹使頁面以正確的順序繪制出來,遵循一定的規(guī)則經(jīng)過一系列渲染工作后卸勺,實現(xiàn)網(wǎng)頁的繪制砂沛,至此最終完成了百度首頁的展示。