當前位置: 妍妍網 > 碼農

在瀏覽器輸入 URL 地址回車後,發生了什麽?

2024-03-21碼農


面試中常問的一個問題就是:在瀏覽器輸入 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 握手過程,以協商出一個會話金鑰,用於訊息加密,提升安全性。

  • - EOF -

    推薦閱讀 點選標題可跳轉

    ·················END·················

    看完本文有收獲?請轉發分享給更多人

    關註「哪咤編程」,提升Java技能

    點贊和在看就是最大的支持 ❤️