面試中常問的一個問題就是:在瀏覽器輸入 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技能
點贊和在看就是最大的支持 ❤️