面試題:瀏覽器輸入URL 後回車發生了什麼?

面試題:瀏覽器輸入URL 後回車發生了什麼?

面試中常問的一個問題就是:在瀏覽器輸入URL 地址回車後,發生了什麼?這裡簡單概述一下。

總體流程圖如下:

圖片

1. URL 解析

瀏覽器首先對URL 解析,解析出協議、域名、端口、資源路徑、參數等。

圖片

2. DNS 域名解析

一般而言,域名比IP 地址更好記,因而我們更習慣在瀏覽器輸入域名而不是IP,而計算機網絡通信所識別的計算機標識是IP 地址,因而首先需要將一個域名轉化為相應的IP 地址,這就是DNS 協議所要做的事。

DNS 就像我們手機中的通訊錄一樣,通訊錄中備註的是對方的姓名(類似於域名),但是打電話的時候實際需要的是電話號碼(類似於IP 地址),利用通訊錄將一個姓名轉化為對應的電話號碼。

圖片

3. 建立TCP 連接

一般在瀏覽器輸入URL,應用層的協議為HTTP/HTTPS,其需要的是可靠的服務,所使用的傳輸層協議為TCP。

通過域名解析後,瀏覽器獲得了服務器的IP,則向服務器發起TCP 連接,這時候就會發生三次握手行為。

圖片

4. 發送HTTP 請求

當瀏覽器與服務器建立連接後,就可以進行數據通信過程,瀏覽器會給服務器發送一個HTTP 請求報文,請求報文包括請求行、請求頭、請求空行和請求體。在請求行中會指定方法、資源路徑以及HTTP 版本,其中資源路徑是指定所要操作資源在服務器中的位置,而方法是指定要對這個資源做什麼樣的操作。

從瀏覽器輸入URL,資源路徑在第一步就已經被解析出來了,而方法為GET,表明要獲取資源,相當於增刪改查中的查詢。

圖片

5. 服務器對請求進行處理並做出響應

當收到瀏覽器發送的請求報文後,服務器會對此請求報文進行相應的處理,並返迴響應報文給瀏覽器。比如請求報文想要獲取(GET) index.html 這個文件,那麼服務器就會找到index.html 文件,然後將此文件作為響應報文中的響應體發送給瀏覽器。

響應報文包括響應行、響應頭、響應空行和響應體。在響應行中會指定HTTP 版本、狀態碼和對狀態碼的解釋信息,比如HTTP/1.1 200 OK ,其中200 是響應碼,指請求被正常處理,也就是成功OK 的意思。

圖片

6. 瀏覽器解析渲染頁面

瀏覽器收到服務器的響應報文後,從響應體中得到相應資源,如HTML 文件、圖片、視頻等,並進行渲染,然後將結果呈現給用戶。

7. 斷開TCP 連接

當數據完成請求到返回的過程之後,根據請求/相應頭中Connection 的Keep-Alive 屬性可以選擇是否斷開TCP 連接,如果不需要再進行數據通信,即可以關閉連接,此時則會發生四次揮手行為。

圖片

注意:

瀏覽器為了提升性能,在URL 解析之後,實際會先查詢是否有緩存,如果緩存命中,則直接返回緩存資源。

如果是HTTPS 協議,在建立TCP 連接之後,還需要進行SSL/TLS 握手過程,以協商出一個會話密鑰,用於消息加密,提升安全性。

本文轉載自微信公眾號「一楓說碼」,作者「一楓說碼」,可以通過以下二維碼關注。