從在地址欄中輸入了URL操灿,到瀏覽器展現(xiàn)出頁面整個(gè)過程中锯仪,大概經(jīng)歷了如下過程:
- 在瀏覽器地址中輸入了URL并回車
- 域名解析
- 服務(wù)器處理請求
- 瀏覽器處理
- 網(wǎng)頁的繪制
一、在瀏覽器地址中輸入U(xiǎn)RL
首先解釋一下URL的定義:
URL(Uniform Resource Locator)趾盐,統(tǒng)一資源定位符,用于定位互聯(lián)網(wǎng)上的資源小腊。
URL的格式一般為:協(xié)議類型://<主機(jī)名>:<端口>/<路徑>/<文件名>
協(xié)議類型有http救鲤、https、ftp秩冈、file等等本缠。其中http協(xié)議是最常見的網(wǎng)絡(luò)傳輸協(xié)議,https則是進(jìn)行加密的網(wǎng)絡(luò)傳輸協(xié)議入问,安全性更高丹锹。
再來解釋一下什么是IP:
IP 是Internet Protocol的縮寫。也就是為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議芬失。在因特網(wǎng)中楣黍,它是能使連接到網(wǎng)上的所有計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)相互通信的一套規(guī)則,規(guī)定了計(jì)算機(jī)在因特網(wǎng)上進(jìn)行通信時(shí)應(yīng)當(dāng)遵守的規(guī)則棱烂。
簡單來說租漂,每個(gè)處于互聯(lián)網(wǎng)中的設(shè)備都有IP地址,比如192.168.0.1颊糜,127.0.0.1等等哩治。
二、域名解析
域名解析過程中衬鱼,域名指的是什么呢业筏?
比如 https://www.baidu.com ,前面的"https"表示采用了https協(xié)議鸟赫,而域名就是www.baidu.com蒜胖,所以我們常說的網(wǎng)站名其實(shí)就是該網(wǎng)站的域名。同時(shí)域名www.baidu.com也在域名服務(wù)器綁定了一個(gè)IP惯疙,理論上輸入與之對應(yīng)的IP也是可以訪問百度首頁的翠勉,但是使用IP地址進(jìn)行訪問遠(yuǎn)不如使用域名方便,一個(gè)原因是域名更容易被人腦記住霉颠,同時(shí)域名也是很多公司的名字对碌。
而域名解析這個(gè)過程,就是在鍵入了URL之后蒿偎,把域名指向網(wǎng)站空間IP朽们,讓人們通過注冊的域名可以方便地訪問到網(wǎng)站的一種服務(wù)怀读。
瀏覽器具體會(huì)從以下幾個(gè)緩存去查找域名對應(yīng)的IP:
- 瀏覽器緩存:瀏覽器會(huì)檢查DNS緩存中是否有與該域名對應(yīng)的IP
- 系統(tǒng)緩存:從Hosts文件查找是否有對應(yīng)域名和IP
- 路由器緩存:路由器也會(huì)緩存DNS,從路由器的DNS中查找對應(yīng)IP
- IPS DNS:比如到8.8.8.8或者114.114.114.114骑脱,也就是谷歌或者互聯(lián)網(wǎng)的應(yīng)用提供商的DNS緩存服務(wù)器中查找IP
(DNS:Domain Name System菜枷,域名系統(tǒng),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫叁丧,能夠使用戶更方便的訪問互聯(lián)網(wǎng)啤誊,而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。)
三拥娄、服務(wù)器處理
服務(wù)器是一臺(tái)安裝系統(tǒng)的機(jī)器蚊锹,常見的系統(tǒng)有Linux、Windows Server 2012稚瘾。而每臺(tái)服務(wù)器的系統(tǒng)中都會(huì)安裝處理請求的應(yīng)用——Web server牡昆。
Web server可以解析接收到的HTTP請求(Rquest),返回一個(gè)HTTP響應(yīng)(Response)給用戶摊欠,或者接受請求后反向代理到其他的Web服務(wù)器進(jìn)行別的解析丢烘。總而言之些椒,服務(wù)器端都會(huì)產(chǎn)生相應(yīng)的HTML響應(yīng)讓瀏覽器進(jìn)行瀏覽播瞳。
具體接收到的HTTP請求則是在后臺(tái)進(jìn)行處理,后臺(tái)處理的主流框架是按照MVC:模型(model)-視圖(view)-控制器(controller)進(jìn)行搭建的摊沉。
具體處理過程為:
四狐史、瀏覽器處理
瀏覽器會(huì)接收到服務(wù)器處理返回的HTML字符串,然后進(jìn)行解析说墨,HTML頁面經(jīng)歷了加載骏全、解析、渲染過程尼斧。
比如瀏覽器解析到了link標(biāo)簽姜贡,瀏覽器會(huì)重新發(fā)送請求獲取css文件;解析到了img標(biāo)簽棺棵,也會(huì)發(fā)送請求獲取圖片資源楼咳;當(dāng)解析到了script標(biāo)簽,html文檔會(huì)掛起渲染(加載解析渲染同步)的線程烛恤,不僅要等待文檔中js文件加載完畢母怜,還要等待解析執(zhí)行完畢,才可以恢復(fù)html文檔的渲染線程缚柏。
五苹熏、繪制網(wǎng)頁
瀏覽器根據(jù)HTML和css計(jì)算得到渲染樹,最終繪制到屏幕上。也就是瀏覽器中我們能看到和進(jìn)行交互的頁面轨域。