前端面試考古:瀏覽器輸入URL後到底發生什麼事呢?

Jia-yun Yang
5 min readDec 5, 2019

--

最近開始前端開發的求職,在網路上流傳的前端面試考題總是少不了它:「在瀏覽器輸入URL發生了什麼事?」而之前在網路上找尋相關資料,總是覺得寫的太艱深難懂而放棄學習XDD 近期有時間整理了自己吸收的部分,並寫了這篇文,以較輕鬆簡單的方式說明,也能記錄一下目前的學習~(應該能死比較少腦細胞?)

Client與Server是啥米?

Client用戶端:
最典型就是用戶的所有上網設備,舉凡連到 Wi-Fi 的電腦、或是連到手機網路的手機都包含在內。
Server伺服器端:
伺服器端是放著網頁、網站、app的電腦。當用戶端設備要訪問網頁時,網頁的副本會從伺服器下載到用戶端,以便顯示在用戶的瀏覽器。

那輸入網址後會發生什麼呢?

  1. 瀏覽器會先進行DNS解析,從URL找到IP位置
  2. 進行TCP連接(3次握手)
    (1) 用戶端向伺服器發送請求是否可以建立鏈接
    (2) 伺服器返回同意
    (3)用戶端回饋伺服器的響應
  3. 用戶端向伺服器發送HTTP請求(GET, POST, PUT, DELETE),請求伺服器向用戶端傳送網站的副本。
  4. 伺服器處理請求,並返回HTTP報文,以一小串稱作「資料封包」的組合形式,傳送網站的檔案(HTML, CSS, JS, image等等)。
  5. 瀏覽器解析渲染頁面(邊解析邊渲染)
    (1) 解析HTML以建立DOM Tree
    (2) 解析CSS已建立CSSOM
    (3)結合DOM tree與CSSOM產生render tree
    (4)利用render tree計算可視元素的版面配置、繪製和合成,這部份可能會有些 JavaScript 程式碼導致重新佈局或重繪。待瀏覽器完成渲染即可將畫面呈現給使用者(概念:reflow回流和repain重繪)
    (註:頁面在首次加載時必然會經歷reflow和repain。reflow和repain過程是非常消耗性能的,尤其是在移動設備上,它會破壞用戶體驗,有時會造成頁面卡頓。所以我們應該盡可能少的減少reflow和repain。)
  6. 連接結束並關閉TCP連接

好的~簡略來說大概會是以上流程,如果各個環節詳細介紹的話可能可以寫成一篇論文😱,不過相信能夠理解以上就能面對面試考題囉!

如果這樣還無法完全理解呢?我們再透過實際生活應用說明看看:

模擬情境說明:

想像網路是一條大道,大道的一端是用戶端(你家),另一端則是伺服器(要去血拼的商店)

(話說住在與時代廣場同一條大道也太奢侈惹)

網路連線:
從家裡到商店要經過的街道

說明 — 讓你可以在網路傳送與接收資料。

TCP/IP:
前往商店搭乘的交通工具,舉凡車子、腳踏車、捷運等等。

說明 — 傳輸控制協定和網際網路協定(Transmission Control Protocol and Internet Protocol)定義資料如何在網路通行的通訊協定。

DNS:
就像網站的電話簿,可以先打電話去問是否營業,再前往商店

說明 — 全名為網域名稱系統(Domain Name Servers),當你在瀏覽器輸入網址時,瀏覽器會在取得網站前,先去看DNS已查到網站的真實地址。瀏覽器需要先找到哪個伺服器在託管指定的網站,這樣才能把HTTP訊息傳送到對的地方。

HTTP:
買東西時可能需要與店員溝通,而HTTP就是用來溝通的語言

說明 — 全名為HTTP超文本傳輸協定(Hypertext Transfer Protocol),是定義用戶端的語言,和伺服器如何對話的應用協議。

Component files:
商店內琳瑯滿目的商品們

說明 — 網站由許多不同的文件組成,其中包含程式檔HTML, CSS, JS等,以及Asset如圖像、音樂、影片、等檔案

其他補充:

關於DNS:
真正的網址不是一般大家在瀏覽器輸入的那段網址,它實際上是一串特殊的數字,例如:50.352.794.24,名稱就叫做IP位址,網路上它們都擁有獨一無二的位置!

那為什麼不用IP位址就好了呢?因為這麼一長串的數字誰記得起來啊!就好像你除了記得爸爸媽媽女友的電話,其他人的都是儲存在電話通訊錄吧?(不過現在好像都打Line🤔)總而言之,這就是為什麼會發明域名伺服器,因為能幫助我們更直覺地搜尋網站!🎉

你也可以想像DNS就是一個翻譯角色,它的工作就是把你在瀏覽器輸入的域名(http://www.google.com)和網站的真實位置(IP)相匹配。(換句話說你也可以直接輸入IP位置來搜尋網頁呢,顆顆⁎⁍̴̛ᴗ⁍̴̛⁎)

最後

希望以上的說明,能夠幫助到「像我一樣曾經看了好幾次還是不懂」的朋友,也許學會這個概念,短時間內比較沒有差異,但未來若想成為更進階的工程師,了解這個一定會很有幫助唷!

(如果有錯誤的部分歡迎留言補充,感謝!)

資料參考:

在浏览器中输入网址后回车发生了哪些事情

網路如何運作

在瀏覽器輸入網址並送出後,到底發生了什麼事?

面試官,不要再問我三次握手和四次揮手

--

--

Jia-yun Yang
Jia-yun Yang

Written by Jia-yun Yang

| Front-End Developer👩🏻‍🔧|

No responses yet