淺析輸入網(wǎng)站地址到頁(yè)面呈現(xiàn)

前言:在瀏覽器中輸入https://www.baidu.com/按下回車鍵,到百度首頁(yè)出現(xiàn),這個(gè)過程發(fā)生了些什么呢?

百度首頁(yè)

一、先了解什么是URL和IP地址

URL正式名稱為 Uniform Resource Locator (簡(jiǎn)稱:URL),是統(tǒng)一資源定位符,用于定位互聯(lián)網(wǎng)上的資源。如https://www.baidu.com/就是URL。URL包含多種協(xié)議,比較常見的有http,https,ftp,file。

  • http是超文本傳輸協(xié)議,是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議。

  • https是加密版超文本傳輸協(xié)定,傳輸?shù)木W(wǎng)頁(yè)經(jīng)過加密,信息內(nèi)容不容易被破解。所以https比http協(xié)議更加安全,也更加常見。

  • ftp是文件傳輸協(xié)議,主要用于在本地主機(jī)和遠(yuǎn)程主機(jī)之間傳送文件,需要對(duì)不同的用戶設(shè)置不同的權(quán)限,一般用于局域網(wǎng)的文件傳輸。

  • file是本地文件傳輸協(xié)議,主要用于訪問本地計(jì)算機(jī)中的文件。

url的格式一般為:協(xié)議類型://<主機(jī)名>:<端口>/<路徑>/文件名,以https://www.baidu.com/為例。

  • https表示該網(wǎng)站服務(wù)器使用https協(xié)議。
  • 主機(jī)名是否輸入沒有影響,端口號(hào)沒有輸入則表示為默認(rèn)端口號(hào),默認(rèn)情況下http服務(wù)的端口為80。ftp為21,https為443。
  • 百度的域名則是www.baidu.com,百度的URL以斜杠“/”結(jié)尾,而沒有給出文件名,在這種情況下,URL引用路徑中最后一個(gè)目錄中的默認(rèn)文件(通常對(duì)應(yīng)于主頁(yè)),這個(gè)文件常常被稱為 index.html 或 default.htm。所以輸入這個(gè)網(wǎng)址實(shí)際是進(jìn)入該網(wǎng)站的主頁(yè)。

IP是互聯(lián)網(wǎng)中的每臺(tái)連接到網(wǎng)絡(luò)的計(jì)算機(jī)為實(shí)現(xiàn)相互通信而遵循的規(guī)則協(xié)議。每個(gè)處于互聯(lián)網(wǎng)中的設(shè)備都有IP 地址,形如 192.168.0.1,而127.0.0.1代表本機(jī)的 IP。IP又分為局域網(wǎng)IP和公網(wǎng)IP。而局域網(wǎng) IP 和公網(wǎng) IP 是有差別的。每個(gè)網(wǎng)站就是靠IP來定位的。

那為什么不直接用IP來訪問網(wǎng)站,而發(fā)明域名呢?
  • IP地址為一串?dāng)?shù)字,一個(gè)網(wǎng)站對(duì)應(yīng)一串?dāng)?shù)字,當(dāng)訪問多個(gè)網(wǎng)站時(shí),需要記憶多個(gè)IP地址,不方便記憶。
  • 域名有語(yǔ)義化的作用,它比IP地址更容易記憶。

二、域名解析

https://www.baidu.com/為例,瀏覽器實(shí)際是不知道https://www.baidu.com/到底是在互聯(lián)網(wǎng)的哪個(gè)位置,它需要查找https://www.baidu.com/這個(gè)域名背后對(duì)應(yīng)的 IP 地址,根據(jù)這個(gè)IP地址,訪問網(wǎng)站。查找域名對(duì)應(yīng)的IP地址的過程叫域名解析。

域名解析流程

  1. 瀏覽器緩存

如果瀏覽器曾經(jīng)訪問過該網(wǎng)站,瀏覽器會(huì)緩存DNS記錄一段時(shí)間,這樣就快速找到該網(wǎng)站對(duì)應(yīng)的 IP 地址,則域名解析結(jié)束。如果沒有找到,會(huì)繼續(xù)進(jìn)行域名解析。

  1. 系統(tǒng)緩存

從電腦系統(tǒng)中 Hosts 的文件查找該域名和對(duì)應(yīng)的IP地址。如果沒有找到,繼續(xù)進(jìn)行域名解析。

  1. 路由器緩存

如果連著同一個(gè)路由器的其他設(shè)備訪問過該網(wǎng)站,路由器也會(huì)緩存域名信息。從該路由器的緩存中查找是否有該網(wǎng)站對(duì)應(yīng)的 IP 地址。如果沒有,域名解析繼續(xù)。

  1. ISP DNS 緩存

以上還是沒有,就會(huì)向網(wǎng)絡(luò)供應(yīng)商 ( ISP) 查找是否有該網(wǎng)站對(duì)應(yīng)的 IP 地址。如果沒有,域名解析繼續(xù)。

  1. 查找根域名伺服器供應(yīng)商

若都沒有找到,則向根域名服務(wù)器查找域名對(duì)應(yīng) IP,根域名服務(wù)器把請(qǐng)求轉(zhuǎn)發(fā)到下一級(jí),直到找到對(duì)應(yīng)IP。

三、服務(wù)器處理

服務(wù)器是一臺(tái)安裝系統(tǒng)的機(jī)器,常見的系統(tǒng)有Linux,Windows server 2012。每臺(tái)服務(wù)器上都會(huì)安裝處理請(qǐng)求的應(yīng)用——web server。常見的web server 有“apache”,“nginx”,“IIS”、“Lighttpd”等。Web服務(wù)器接收用戶的請(qǐng)求(requset)交給網(wǎng)站代碼或反向代理到其他服務(wù)器,然后進(jìn)行一個(gè)網(wǎng)站處理流程,最后產(chǎn)生一個(gè)html的響應(yīng)(response)給瀏覽器。

網(wǎng)站處理流程

網(wǎng)站處理是實(shí)際后臺(tái)處理。后臺(tái)開發(fā)到現(xiàn)在有很多框架,但大部分都還是按照“MVC設(shè)計(jì)模式”進(jìn)行搭建的。

MVC是一個(gè)設(shè)計(jì)模式,將應(yīng)用程序分成三個(gè)核心部件:模型(model),視圖(view),控制器(controller)

MVC模型

MVC的處理過程

  1. 每一個(gè)用戶輸入的請(qǐng)求

  2. 首先被路由接收,再交由控制器決定用哪個(gè)模型來進(jìn)行處理

  3. 將用戶輸入的指令數(shù)據(jù)傳給模型進(jìn)行處理

  4. 進(jìn)行業(yè)務(wù)邏輯判斷,按需要向數(shù)據(jù)庫(kù)進(jìn)行存取

  5. 根據(jù)業(yè)務(wù)邏輯選擇視圖

  6. 控制器用業(yè)務(wù)邏輯相應(yīng)的數(shù)據(jù)填入視圖模型

  7. 將處理好的視圖模版的HTML交回控制器

  8. 生成 HTML 字符串返給瀏覽器處理,并通過顯示頁(yè)面呈現(xiàn)給用戶。

四、瀏覽器處理

瀏覽器處理是根據(jù)MVC模型處理返回的HTML字符串被瀏覽器接受后被一句句讀取解析,當(dāng)解析到link標(biāo)簽后重新發(fā)送請(qǐng)求獲取CSS 。當(dāng)解析到scrip標(biāo)簽后發(fā)送請(qǐng)求獲取JS,并執(zhí)行代碼。當(dāng)解析到img標(biāo)簽后發(fā)送請(qǐng)求獲取圖片資源。

瀏覽器是一個(gè)邊解析邊渲染的過程。首先瀏覽器解析HTML文件構(gòu)建DOM樹,然后解析CSS文件構(gòu)建渲染樹,等到渲染樹構(gòu)建完成后,瀏覽器開始布局渲染樹并將其繪制到屏幕上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容