當(dāng)用戶打開瀏覽器内贮,輸入 baidu.com,頁面展示百度首頁赏半。整個(gè)過程發(fā)生了什么贺归?
輸入baidu.com尖啡,敲起回車尤辱,將域名baidu.com通過DNS域名解析成IP地址痴颊,然后向該IP地址的服務(wù)器發(fā)起請(qǐng)求牲剃,服務(wù)器響應(yīng)并進(jìn)行處理护昧,往瀏覽器(客戶端)發(fā)送HTML等等的文件滥玷,瀏覽器收到文件后進(jìn)行解析處理两疚,在通過瀏覽器渲染把頁面呈現(xiàn)到我們的屏幕上量窘。
下面我們?cè)敿?xì)解釋這一過程...
一.在瀏覽器輸入U(xiǎn)RL
1.URL是什么埃撵?
談到URL,不得不提一下URI(Uniform Resource Identifier),統(tǒng)一資源標(biāo)識(shí)符赵颅,用于標(biāo)識(shí)資源。URI是一種可以用于WWW之外的高效識(shí)別碼暂刘,它被用于主頁地址饺谬、電子郵件、電話號(hào)碼等各種組合中谣拣,如下表示:
** http://www.rfc-editor.org/rfc/rfc4395.txt **
** http://www.ietf.org:80/index.html **
** http://localhost:631 **
這些例子屬于一般主頁網(wǎng)址募寨,也被叫做URL(Uniform Resource Locator)。URL常被人們用來表示互聯(lián)網(wǎng)中資源文件的具體位置森缠。但是URI不局限標(biāo)識(shí)互聯(lián)網(wǎng)資源拔鹰,它可以作為所有資源的識(shí)別碼。現(xiàn)在贵涵,在有效的RFC文檔中列肢,已經(jīng)不使用URL,轉(zhuǎn)而在使用URI。相比URL狹義的概念宾茂,URI是一個(gè)廣義的概念瓷马。因此,URI可以用于除了www之外的其他應(yīng)用協(xié)議中跨晴。
URL組成:URL由協(xié)議决采,域名,端口坟奥,文件路徑組成
例子:https://github.com:8080/zhuanghaixin
協(xié)議:傳輸?shù)膮f(xié)議树瞭,比如http拇厢、https、ftp晒喷、file 協(xié)議
域名:github.com即為域名,一個(gè)URL中孝偎,也可以使用IP地址作為域名使用
端口:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符凉敲。端口不是一個(gè)URL必須的部分衣盾,如果省略端口部分,將采用默認(rèn)端口
文件路徑:/zhuanghaixin即為文件的路徑
二.域名解析
1.域名是什么爷抓?
以一個(gè)常見的域名為例說明势决,baidu網(wǎng)址是由二部分組成,標(biāo)號(hào)“baidu”是這個(gè)域名的主域名
體蓝撇,而最后的標(biāo)號(hào)“com”則是該域名的后綴果复,代表的這是一個(gè)com國際域名,是頂級(jí)域名渤昌。而前面的www.是網(wǎng)絡(luò)名虽抄, 為www的域名。
2. IP地址是什么独柑?
IP地址是指互聯(lián)網(wǎng)協(xié)議地址(英語:Internet Protocol Address迈窟,又譯為網(wǎng)際協(xié)議地址),是IP Address的縮寫忌栅。IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式车酣,它為互聯(lián)網(wǎng)上的每一個(gè)網(wǎng)絡(luò)和每一臺(tái)主機(jī)分配一個(gè)邏輯地址,以此來屏蔽物理地址的差異索绪。目前還有些ip代理軟件湖员,但大部分都收費(fèi)。
- 每個(gè)處于互聯(lián)網(wǎng)中的設(shè)備都有IP 地址者春,形如 192.168.0.1
- 局域網(wǎng) IP 和公網(wǎng) IP 是有差別的
- 127.0.0.1代表本機(jī)的 IP
3.域名解析的流程
對(duì)于 http://www.baidu.com, 瀏覽器實(shí)際上不知道 www.baidu.com到底是什么東西,需要查找baidu.com網(wǎng)站所在服務(wù)器的IP地址清女,才能找到目標(biāo)钱烟。
尋找過程:
- 瀏覽器緩存,瀏覽器會(huì)緩存DNS記錄一段時(shí)間
- 系統(tǒng)緩存 - 從 Hosts 文件查找是否有該域名和對(duì)應(yīng) IP
- 路由器緩存 – 一般路由器也會(huì)緩存域名信息
- ISP DNS 緩存 – 比如到電信的 DNS 上查找緩存
- 如果都沒有找到嫡丙,則向根域名服務(wù)器查找域名對(duì)應(yīng) IP拴袭,根域名服務(wù)器把請(qǐng)求轉(zhuǎn)發(fā)到下一級(jí),直到找到 IP曙博。
比如說瀏覽器想要查詢www.baidu.com的IP地址拥刻,前面的方法都找不到,它就開始查詢根服務(wù)器父泳,找到com域名解析服務(wù)器般哼,然后查詢com解析服務(wù)器吴汪,找到baidu.com域名解析服務(wù)器,最好查詢baidu.com域名解析服務(wù)器蒸眠,獲得www.baidu.com的IP地址漾橙。
三.服務(wù)器處理
1.服務(wù)器是什么?
服務(wù)器是一臺(tái)安裝系統(tǒng)的機(jī)器楞卡,常見的系統(tǒng)如Linux霜运、windows server 2012。系統(tǒng)里安裝的處理請(qǐng)求的應(yīng)用叫 Web server蒋腮。常見的 web服務(wù)器有 Apache淘捡、Nginx、IIS池摧、Lighttpd焦除。
2.web服務(wù)器的作用?
瀏覽器把用戶發(fā)起的HTTP請(qǐng)求發(fā)送給服務(wù)器后险绘,Web server會(huì)進(jìn)而在它做自己的存儲(chǔ)空間中搜索所請(qǐng)求的文件(因?yàn)橥粋€(gè)服務(wù)器地址踢京,有時(shí)候可能同時(shí)綁定了多個(gè)域名,此時(shí)需要配置web服務(wù)器將請(qǐng)求轉(zhuǎn)給相應(yīng)的端口)宦棺。當(dāng)找到這文件時(shí)瓣距,這個(gè)服務(wù)器會(huì)讀取它,按需處理它代咸,并且把它傳送回瀏覽器蹈丸。Web server就相對(duì)于起到了內(nèi)容分發(fā)的作用,為不同域名的用戶請(qǐng)求展示其相應(yīng)的內(nèi)容,如下圖呐芥。
四.網(wǎng)站處理
這一步指的是網(wǎng)站后臺(tái)處理數(shù)據(jù)反饋給瀏覽器之前的過程逻杖,常見的處理模型有MVC 模型(model)-視圖(view)-控制器(controller),控制器從數(shù)據(jù)模型中拿到數(shù)據(jù)思瘟,再從試圖中拿到HTML荸百,經(jīng)過處理,返回html字符串給瀏覽器滨攻。
五.瀏覽器處理
HTML字符串被瀏覽器接受后被一句句讀取解析
解析到link 標(biāo)簽后重新發(fā)送請(qǐng)求獲取css
解析到 script標(biāo)簽后發(fā)送請(qǐng)求獲取 js够话,并執(zhí)行代碼
解析到img 標(biāo)簽后發(fā)送請(qǐng)求獲取圖片資源
六.繪制網(wǎng)頁
瀏覽器根據(jù) HTML 和 CSS 計(jì)算得到渲染樹,繪制到屏幕上光绕,并且js 會(huì)被執(zhí)行