導(dǎo)航流程:從輸入URL到頁面展示况凉,這中間發(fā)生了什么?

“在瀏覽器里各拷,從輸入 URL 到頁面展示刁绒,這中間發(fā)生了什么? ”這是一道經(jīng)典的面試題烤黍。涉及到一系列的知識考察:網(wǎng)絡(luò)知市、操作系統(tǒng)、Web 等速蕊。

  1. 瀏覽器進(jìn)程接收到用戶輸入的 URL 請求嫂丙,瀏覽器進(jìn)程便將該 URL 轉(zhuǎn)發(fā)給網(wǎng)絡(luò)進(jìn)程。
  2. 在網(wǎng)絡(luò)進(jìn)程中發(fā)起真正的 URL 請求规哲。
  3. 網(wǎng)絡(luò)進(jìn)程接收到了響應(yīng)頭數(shù)據(jù)跟啤,便解析響應(yīng)頭數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)發(fā)給瀏覽器進(jìn)程唉锌。
  4. 瀏覽器進(jìn)程接收到網(wǎng)絡(luò)進(jìn)程的響應(yīng)頭數(shù)據(jù)之后隅肥,發(fā)送“提交導(dǎo)航 (CommitNavigation)”消息到渲染進(jìn)程
  5. 渲染進(jìn)程接收到“提交導(dǎo)航”的消息之后,便開始準(zhǔn)備接收 HTML 數(shù)據(jù)袄简,接收數(shù)據(jù)的方式是直接和網(wǎng)絡(luò)進(jìn)程建立數(shù)據(jù)管道武福。
  6. 最后渲染進(jìn)程會向瀏覽器進(jìn)程“確認(rèn)提交”,這是告訴瀏覽器進(jìn)程:“已經(jīng)準(zhǔn)備好接受和解析頁面數(shù)據(jù)了”痘番。
  7. 瀏覽器進(jìn)程接收到渲染進(jìn)程“提交文檔”的消息之后,便開始移除之前舊的文檔平痰,然后更新瀏覽器進(jìn)程中的頁面狀態(tài)汞舱。


    從輸入 URL 到頁面展示完整流程示意圖

用戶發(fā)出 URL 請求到頁面開始解析的這個過程,就叫做導(dǎo)航宗雇。

從輸入URL到頁面展示

一. 用戶輸入

用戶在地址欄輸入查詢關(guān)鍵字后昂芜,地址欄會判斷輸入的是搜索內(nèi)容還是請求的URL

  • 搜索內(nèi)容:地址欄會使用瀏覽器默認(rèn)的搜索引擎來合成新的帶搜索關(guān)鍵字的URL。如在谷歌瀏覽器地址欄輸入大山赔蒲,回車泌神,會看到地址欄的URL變?yōu)?br> https://www.google.com/search?q=大山&oq=大山
  • 輸入內(nèi)容符合URL規(guī)則:地址欄會根據(jù)規(guī)則良漱,在前面加上協(xié)議合成完整的URL,如:在谷歌瀏覽器地址欄輸入baidu.com欢际,回車母市,會看到地址欄的URL變?yōu)?code>https://www.baidu.com/

瀏覽器開始加載一個地址后,標(biāo)簽頁上的圖標(biāo)會變成loading损趋,但頁面還是顯示之前的頁面內(nèi)容患久,因為需要等待提交文檔階段,頁面內(nèi)容才會被替換浑槽。

二. URL請求過程

網(wǎng)絡(luò)進(jìn)程會查找本地緩存是否緩存了該資源

  • 有緩存資源:直接返回資源給瀏覽器進(jìn)程
  • 沒有緩存資源:直接進(jìn)入網(wǎng)絡(luò)請求流程

網(wǎng)絡(luò)請求流程步驟:

  1. 進(jìn)行DNS解析蒋失,獲取到請求域名服務(wù)器的IP地址
  2. 利用IP地址和服務(wù)器建立TCP連接
  3. TCP連接建立之后,構(gòu)建請求行桐玻、請求頭等信息篙挽,并把和該域名相關(guān)的Cookie等數(shù)據(jù)附加到請求頭中
  4. 向服務(wù)器發(fā)送構(gòu)建的請求信息
  5. 服務(wù)器根據(jù)請求信息生成響應(yīng)數(shù)據(jù),包括響應(yīng)行镊靴、響應(yīng)頭和響應(yīng)體等信息铣卡,并把響應(yīng)數(shù)據(jù)發(fā)給網(wǎng)絡(luò)進(jìn)程
  6. 網(wǎng)絡(luò)進(jìn)程解析響應(yīng)頭
    6.1. 如果響應(yīng)頭中的狀態(tài)碼是301/302,網(wǎng)絡(luò)進(jìn)程會讀取響應(yīng)行中的Location字段并發(fā)起新的URL請求
    6.2. 如果響應(yīng)頭中的狀態(tài)碼是200邑闲,網(wǎng)絡(luò)進(jìn)程告訴瀏覽器一切正常算行,可以繼續(xù)往下處理該請求了。
    如果響應(yīng)頭中的狀態(tài)碼是200苫耸,會繼續(xù)解析Content-Type字段
    6.2.1. 如果返回的值標(biāo)識是一個下載文件州邢,則該請求會被提交給瀏覽器的下載管理器,URL請求的導(dǎo)航流程就此結(jié)束褪子。
    6.2.2. 如果返回的值標(biāo)識是一個HTML文件量淌,瀏覽器會繼續(xù)進(jìn)行導(dǎo)航流程,即網(wǎng)絡(luò)進(jìn)程會把響應(yīng)頭數(shù)據(jù)轉(zhuǎn)發(fā)給瀏覽器進(jìn)程嫌褪。

三. 準(zhǔn)備渲染進(jìn)程

  • 默認(rèn)情況下呀枢,Chrome會為每個頁面分配一個渲染進(jìn)程。
  • 如果從A頁面打開了B頁面笼痛,而B頁面和A頁面屬于同一站點的話裙秋,那么B頁面會復(fù)用A頁面的渲染進(jìn)程。官方把這個默認(rèn)策略叫 process-per-site-instance缨伊。

渲染進(jìn)程準(zhǔn)備好之后摘刑,還不能立即進(jìn)入文檔解析狀態(tài),因為此時的文檔數(shù)據(jù)還在網(wǎng)絡(luò)進(jìn)程中刻坊,并沒有提交給渲染進(jìn)程枷恕,所以下一步就進(jìn)入了提交文檔階段。

四. 提交文檔

所謂的提交文檔谭胚,是指瀏覽器進(jìn)程將網(wǎng)絡(luò)進(jìn)程接收到的HTML數(shù)據(jù)提交給渲染進(jìn)程徐块。

  1. 瀏覽器進(jìn)程接收到網(wǎng)絡(luò)進(jìn)程的響應(yīng)頭數(shù)據(jù)后未玻,便向渲染進(jìn)程發(fā)起“提交文檔”的消息
  2. 渲染進(jìn)程接收到“提交文檔”的消息后,會和網(wǎng)絡(luò)進(jìn)程建立傳輸數(shù)據(jù)的“管道”
  3. 文檔傳輸完成后胡控,渲染進(jìn)程返回“確認(rèn)提交”消息給瀏覽器進(jìn)程
  4. 瀏覽器進(jìn)程接收到“確認(rèn)提交”的消息后扳剿,會更新瀏覽器的狀態(tài),包括安全狀態(tài)铜犬、地址欄的URL舞终、前進(jìn)后退的歷史狀態(tài),并更新Web頁面癣猾。
    導(dǎo)航完成狀態(tài)

    這也解釋了為什么在瀏覽器地址欄輸入一個URL后敛劝,原頁面沒有立馬消失,而是要加載一會才更新頁面纷宇。
    至此夸盟,一個完整的導(dǎo)航流程就走完了,之后就進(jìn)入渲染階段

渲染過程涵蓋了從用戶發(fā)起請求到提交文檔給渲染進(jìn)程的中間所有階段像捶。

五. 渲染階段

文檔被提交上陕,渲染進(jìn)程便開始頁面解析和子資源加載。渲染流程參考下一篇文章拓春。

文章內(nèi)容參考極客時間 李兵老師的瀏覽器工作原理與實踐課程释簿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市硼莽,隨后出現(xiàn)的幾起案子庶溶,更是在濱河造成了極大的恐慌,老刑警劉巖懂鸵,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偏螺,死亡現(xiàn)場離奇詭異,居然都是意外死亡匆光,警方通過查閱死者的電腦和手機套像,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來终息,“玉大人夺巩,你說我怎么就攤上這事≈苷福” “怎么了柳譬?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長休傍。 經(jīng)常有香客問我,道長蹲姐,這世上最難降的妖魔是什么磨取? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任人柿,我火速辦了婚禮,結(jié)果婚禮上忙厌,老公的妹妹穿的比我還像新娘凫岖。我一直安慰自己,他們只是感情好逢净,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布哥放。 她就那樣靜靜地躺著,像睡著了一般爹土。 火紅的嫁衣襯著肌膚如雪甥雕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天胀茵,我揣著相機與錄音社露,去河邊找鬼琼娘。 笑死峭弟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脱拼。 我是一名探鬼主播瞒瘸,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼熄浓!你這毒婦竟也來了情臭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤玉组,失蹤者是張志新(化名)和其女友劉穎谎柄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惯雳,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡朝巫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了石景。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劈猿。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖潮孽,靈堂內(nèi)的尸體忽然破棺而出揪荣,到底是詐尸還是另有隱情,我是刑警寧澤往史,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布仗颈,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挨决。R本人自食惡果不足惜请祖,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脖祈。 院中可真熱鬧肆捕,春花似錦、人聲如沸盖高。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喻奥。三九已至席纽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間映凳,已是汗流浹背胆筒。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诈豌,地道東北人仆救。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像矫渔,于是被迫代替她去往敵國和親彤蔽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容