面試題:輸入URL之後會執行什麼流程?

java大數據高級架構師 發佈 2022-08-08T12:46:38.074027+00:00

因為 IP 地址很長,不方便記憶,而 URL 地址好記很多,所以會使用 URL 來替代 IP 地址,而 URL 就像 IP 地址的別名一樣,用它可以定位到相應的 IP 地址。

在瀏覽器中輸入 URL 之後,它會執行以下幾個流程:

  1. 執行 DNS 域名解析;
  2. 封裝 HTTP 請求數據包;
  3. 封裝 TCP 請求數據包;
  4. 建立 TCP 連接(3 次握手);
  5. 參數從客戶端傳遞到伺服器端;
  6. 伺服器端得到客戶端參數之後,進行相應的業務處理,再將結果封裝成 HTTP 包,返回給客戶端;
  7. 伺服器端和客戶端的交互完成,斷開 TCP 連接(4 次揮手);
  8. 瀏覽器通過自身執行引擎,渲染並展示最終結果給用戶。

1.DNS 域名解析

在網絡中定位是依靠 IP 進行身份定位的,所以 URL 訪問的第一步便是先要得到伺服器端的 IP 地址。而得到伺服器的 IP 地址需要使用 DNS(Domain Name System,域名系統)域名解析,DNS 域名解析就是通過 URL 找到與之相對應的 IP 地址。

PS:為什麼不直接訪問 IP 地址來請求伺服器?因為 IP 地址很長,不方便記憶,而 URL 地址好記很多,所以會使用 URL 來替代 IP 地址,而 URL 就像 IP 地址的別名一樣,用它可以定位到相應的 IP 地址。

DNS 域名解析的大致流程如下:

  1. 先檢查瀏覽器中的 DNS 緩存,如果瀏覽器中有對應的記錄會直接使用,並完成解析;
  2. 如果瀏覽器沒有緩存,那就去查詢作業系統的緩存,如果查詢到記錄就可以直接返回 IP 地址,完成解析;
  3. 如果作業系統沒有 DNS 緩存,就會去查看本地 host 文件,Windows 作業系統下,host 文件一般位於 "C:\Windows\System32\drivers\etc\hosts",如果 host 文件有記錄則直接使用;
  4. 如果本地 host 文件沒有相應的記錄,會請求本地 DNS 伺服器,本地 DNS 伺服器一般是由本地網絡服務商如移動、電信提供。通常情況下可通過 DHCP 自動分配,當然你也可以自己手動配置。目前用的比較多的是谷歌提供的公用 DNS 是 8.8.8.8 和國內的公用 DNS 是 114.114.114.114。
  5. 如果本地 DNS 伺服器沒有相應的記錄,就會去根域名伺服器查詢了,目前全球一共有 13 組根域名伺服器(這裡並不是指 13 台伺服器,是指 13 個 ip 地址,按字母 a-m 編號),為了能更高效完成全球所有域名的解析請求,根域名伺服器本身並不會直接去解析域名,而是會把不同的解析請求分配給下面的其他伺服器去完成,下面是 DNS 域名系統的樹狀結構圖:

2.封裝 HTTP 請求數據包

一個 HTTP 請求對象包含 4 部分內容:

  1. 請求行
  2. 請求報頭
  3. 空行
  4. 請求正文

它的基本格式如下:


在得到了伺服器 IP 之後,緊接著會將本地的請求封裝成一個 HTTP 數據包,如上圖所示。

3.封裝 TCP 請求數據包

HTTP 底層是依賴 TCP/IP 協議實現的,所以在底層數據傳輸時,會將 HTTP 請求包進一步封裝成 TCP 數據包。

4.建立 TCP 連接(3 次握手)

HTTP 通訊的基礎是 TCP 連接,TCP 連接需要 3 次握手,3 次握手就是為了驗證客戶端的發送能力和接收能力,以及伺服器端的發生能力和接收能力,就像打電話一樣,通常的通話是這樣開頭的:

  1. :喂,能聽到嗎?
  2. 對方:能聽到,你能聽到嗎?(證明了對方的接收能力和我的發送能力)
  3. :我也能聽到,咱們聊正事吧。(證明了對方的發送能力和我的接收能力)

經過以上 3 次握手就可以證明客戶端的發送能力和接收能力,以及伺服器端的發生能力和接收能力,這樣就可以正式開始通訊了。

5.伺服器端獲取到 HTTP 請求參數

數據在經過 TCP 傳到到伺服器程序之後,又會將 TCP 的數據包轉換成 HTTP 數據包(這一切都是 TCP/IP 協議的功勞),這樣伺服器端就可以得到客戶端發送的請求數據了。

6.伺服器端執行業務處理,並返回數據

伺服器端拿到了客戶端的請求參數之後,會進行相應的業務處理,處理完成之後,再將處理的結果返回給客戶端。返回的流程和發送的流程類似,先將結果封裝成 HTTP 數據包,HTTP 數據包可分為以下 4 部分:

  1. 狀態行
  2. 響應報頭
  3. 空行
  4. 響應正文

它的基本格式如下:


狀態行用於描述伺服器的返回狀態,它由 3 部分組成:

  1. HTTP 版本號,如 HTTP/1.1;
  2. 狀態碼,如 200;
  3. 狀態描述信息,如 OK;

常見的狀態碼有以下幾個:

  • 200:返回成功;
  • 301:永久重定向;
  • 302:臨時重定向;
  • 404:未找到頁面;
  • 500:伺服器程序出錯。

響應正文就是返回給客戶端的所有數據。

7.斷開 TCP 連接(4 次揮手)

在經過一次請求和一次響應之後,客戶端和伺服器的「交流」就結束了,此時就可以執行 TCP 連接斷開的流程了,它需要 4 次揮手:

  • 客戶端:咱們分手吧;
  • 伺服器端:好的,讓我準備一下。
  • 伺服器端:我準備好了,分手吧。
  • 客戶端:好的。

經過了以上流程之後,TCP 的連接就斷開了。

8.瀏覽器渲染並展示結果

經過 TCP 交互之後,客戶端也得到了伺服器端返回的數據,然後使用瀏覽器自身的執行引擎,將最終的結果展示給用戶,整個執行流程就結束了。

關鍵字:

📍不要不信邪!『口氣 🗣 難聞真的會交不到女友』

2021-11-15T06:08:50.100839+00:00

【勵志】小弟魯了25年,終於脫胎換骨交到,真沒在唬洨... 糾纏我多年的牙垢&異味問題都解決了!(文長慎入)

小弟我個性從小就比較宅,生活習慣算中規中矩,早晚都會刷牙,可是我高三那年卻第一次被要好的同學說『欸~你嘴巴味道有點怪怪的』當時還想說有嗎,我都有刷阿!

 

之後不只一個同學跟我說口氣問題,害我從那時候開始,很怕近距離跟人講話,還自作聰明想用口香糖來鎮住那味道😅
我真的錯了... 根本壓不住!甚至意識到很多女生跟我講話不願意靠太近、或有所遮掩

 

最痛的一次是,跟喜歡很久的學妹告白,她竟然回『我不喜歡牙齒髒、口氣不好的男生』我對她的直接也無話可說!就下定決心要解決牙齒問題

 

✅打著期末報告突然看到一篇百萬業務的秘訣,裡面說到他非常注重口腔清潔,在日本如果業務員嘴巴有味道,是非常不禮貌的!更別說想成功讓客人買單,所以除了日常清潔,他一定會再使用【香氛亮白美齒液】去解決刷牙無法消除的髒東西

 

 

認真讀完也找到文中所說的美齒液,原來它類似漱口水,只是非常特別添加了櫻花和蜜桃的香味,還用天然草本取代人工甜味劑,來消除口腔異味

 

不得不說人不能鐵齒!本以為沒用,平常刷牙吃口香糖都... 但第一次漱完看到渣渣,明明才刷過,怎麼這麼髒 🤢 

 

 

現在覺得嘴巴很清爽,自己呼了兩口氣『哈~哈~還真的滿香的』後來和我哥在客廳打手遊,他還說你又幹嘛了,那什麼香味(當下心裡暗自竊喜)

使用2個月,之前說我嘴巴有味道的同學都問『你是天天都吃口香糖喔』其實都是漱口水的香味,哈哈... 超爽!終於解決多年的異味困擾 ☺ 牙齒也明顯白了許多!!! 原來這美齒香氛是真的(我也因為這樣終於交到了女朋友啦)

 

 

分享給一樣有口氣問題的人 🗣 口腔清潔才是解決異味得不二法門
 

商品資訊

 

Huluhulu_集中亮白_日本櫻花香氛美齒液

 

[日本女性好評口味 戀愛櫻花香氣]

✓用餐後 ✓約會前 ✓牙齒黃 ✓戴牙套


 

♡亮白效果 ♡櫻花口香 ♡護齦防蛀

♦日本專利30秒徹底消臭 散發櫻花迷人口香

♦加強亮白效果 分解牙齒表面牙漬 齒垢清潔

♦巴西綠蜂膠 護齒護齦 添加濃度比一般多30% 

♦調節酸鹼值 溫和不辛辣無酒精 小孩也喜歡

 

https://www.cashin.tw/product/000000000034233