網(wǎng)站的訪問(wèn)從輸入 URL 到頁(yè)面加載是怎么完成?相信很多的人都瀏覽過(guò)網(wǎng)站,但是網(wǎng)站的訪問(wèn)過(guò)程是怎么完成的?下面小編的解析。
網(wǎng)站的訪問(wèn)從輸入 URL 到頁(yè)面加載是怎么完成?相信很多的人都瀏覽過(guò)網(wǎng)站,但是網(wǎng)站的訪問(wèn)過(guò)程是怎么完成的?下面小編的解析:
操作的過(guò)程很簡(jiǎn)單:打開(kāi)瀏覽器,在地址欄中鍵盤(pán)輸入www.baidu
.com,回車(chē),瀏覽網(wǎng)頁(yè)….
地址欄輸入www.baidu.com
當(dāng)你按輸入www.baidu.com,瀏覽器接收到這個(gè)消息之后,會(huì)觸發(fā)自動(dòng)完成機(jī)制。瀏覽器根據(jù)自己的算法識(shí)別出你要訪問(wèn)的URL。
按下回車(chē)鍵
此時(shí),回車(chē)鍵的電流回路通過(guò)電
容器間接地閉合,使得少量的電流進(jìn)入了鍵盤(pán)的主邏輯電路系統(tǒng)中。邏輯電路系統(tǒng)會(huì)掃描每個(gè)按鍵的狀態(tài),對(duì)于按鍵開(kāi)關(guān)的電位彈跳變化進(jìn)行解析,并將其轉(zhuǎn)化為鍵盤(pán)碼值。鍵盤(pán)控制器在得到碼值之后,將進(jìn)行編碼。編碼后,鍵碼值將儲(chǔ)存在寄存器內(nèi)。鍵盤(pán)的USB控制器會(huì)查詢到這個(gè)鍵碼值,然后將鍵碼值轉(zhuǎn)換為一個(gè)數(shù)據(jù)包。之后,此數(shù)據(jù)包將通過(guò)鍵盤(pán)傳遞給計(jì)算機(jī),計(jì)算機(jī)把數(shù)據(jù)包進(jìn)行解碼。最后,解碼后的按鍵碼值傳輸?shù)讲僮飨到y(tǒng)的硬件層。
解析URL
瀏覽器通過(guò)URL可以知道將要使用HTTP協(xié)議,和請(qǐng)求資源的主頁(yè)。
瀏覽器會(huì)將地址欄中輸入的文字傳給默認(rèn)的搜索引擎。把文字傳遞給搜索引擎的時(shí)候,URL會(huì)帶有特定的一串字符,用來(lái)告訴搜索引擎這次搜索來(lái)自某個(gè)瀏覽器。
Unicode(規(guī)范字符集)編碼轉(zhuǎn)換。如果有非ASCII的字符,將其進(jìn)行Unicode編碼轉(zhuǎn)換。
檢查HSTS列表
瀏覽器檢查自帶的“HSTS(HTTP嚴(yán)格傳輸安全)”列表,這個(gè)列表里包含了那些只使用HTTPS進(jìn)行連接的網(wǎng)站。
DNS查詢與解析
如果緩存中沒(méi)有,就調(diào)用庫(kù)函數(shù)進(jìn)行查詢。庫(kù)函數(shù)在進(jìn)行DNS解析之前,檢
查域名是否在本地 Hosts 里。
如果域名在緩存和Hosts中都沒(méi)有,庫(kù)函數(shù)會(huì)向 DNS
服務(wù)器發(fā)送一條 DNS 查詢請(qǐng)求。
查詢本地的DNS服務(wù)器。
首先查詢地址解析協(xié)議(ARP)的緩存,如果緩存命中,則返回結(jié)果:目標(biāo) IP = MAC地址。如果緩存沒(méi)有命中,就看看目標(biāo) IP 地址是不是在本地路由表中的某個(gè)子網(wǎng)內(nèi),并使用相關(guān)接口。然后查詢選擇的網(wǎng)絡(luò)接口的MAC地址。
發(fā)送ARP請(qǐng)求,路由器或其他硬件會(huì)返回結(jié)果(結(jié)果中包含默認(rèn)網(wǎng)關(guān)的IP地址)。
通過(guò)TCP/UDP協(xié)議向DNS服務(wù)器發(fā)送相應(yīng)請(qǐng)求。如果本地DNS服務(wù)器沒(méi)有找到結(jié)果,將會(huì)逐層查詢,直到結(jié)果(目標(biāo)服務(wù)器的IP地址)返回。
使用套接字
瀏覽器得到了目標(biāo)服務(wù)器的 IP 地址,以及 URL 中給出來(lái)端口號(hào)(http默認(rèn)端口號(hào)是80端口)后,瀏覽器調(diào)用庫(kù)函數(shù)socket。這個(gè)請(qǐng)求將被封裝,目標(biāo)端口會(huì)被加入頭部。在網(wǎng)絡(luò)層會(huì)再加入一個(gè)IP頭部,里面包含了目標(biāo)服務(wù)器的IP地址以及本機(jī)的IP地址。接下來(lái)繼續(xù)封裝,將本地內(nèi)置網(wǎng)卡的MAC地址和本地路由器的MAC地址封裝進(jìn)去。此時(shí)封裝包已經(jīng)準(zhǔn)備就緒。