一個頁面從輸入URL到頁面加載顯示完成的詳細過程


下面以訪問baidu頁面來做一個過程分析

  • 輸入 URL:http://www.baidu.com
  • DNS 域名解析
  • 計算機無法識別域名,計算機與計算機之間要想進行通信,必須通過ip地址用來定位該計算機所在的位置
  • 在瀏覽器中,輸入的ip地址或者域名,默認給你加了一個80端口號(對方的服務器監聽的就是80端口)
  • 158.12.25.652 域名就是為了好記
  • 為了好記,所以我們的萬維網提供了 一個 域名這樣的概念
  • 當你輸入了 ip 地址后,瀏覽器會自動去 找DNS域名解析服務器,
  • 建立 TCP 連接(Socket):三次握手,確保這個一定是一個有效的請求和響應,這個三次握手在業界相信大多數人都不陌生,雖然它是提高了傳輸的有效性,但是這個導致的直接問題就是整個傳輸過程是很耗時的,也就是說每次http請求都會經歷三次握手這個過程,消耗的時間也是不言而喻,並且傳統的http協議規定一次請求只能請求一個文件,所以一些頂級網站千方百計的采取一些減少http請求的策略,大多數就是采取一次http請求能夠請求多個文件這樣的實現,欣喜的是,http2.0已經支持能夠一次http能夠請求多個文件,這個還是值得期待全部推行開來的,只不過肯定需要過上一段時間,慢慢去等待推行吧。
  • 將用戶輸入的地址封裝成 HTTP Request 請求報文 發送到服務器
  • 瀏覽器將用戶輸入的 URL 地址根據HTTP協議 封裝成了 http 請求報文(請求頭+請求行+請求體)
  • 該報文說白了也就是字符串而已,最終也要被轉成了二進制數據再發送到服務器
  • 后台服務器接收到用戶HTTP Request 請求報文
  • 后台服務器接收到 客戶端發送給自己的數據(二進制數據)
    • 首先把二進制數據按照編碼解析成字符,(人類可以識別的)
    • 解析成字符之后,再按照 HTTP 協議規范中定義的格式解析出來
  • 后台服務器處理用戶請求信息

  • 當得到用戶請求報文之后,根據請求報文中的 get、port或者 URL、或者URL中的查詢字符串或者 請求體中的數據
  • 根據用戶的特定的請求數據做特定的處理
  • 后台服務器將相應結果封裝到 HTTP Response 響應報文中 發送給客戶端
  • 當我們解析和處理完用戶請求報文消息之后
  • 服務器開始將具體的 要發送給客戶端的數據 根據 HTTP 協議規范 封裝成 HTTP協議響應報文
  • 響應頭、響應字段、響應體
  • 該數據說白了也是具有特定格式的字符串而已,最終這個字符串也要轉換成二進制數據發送到客戶端
  • 發送到客戶端也是通過 Socket(ip地址、端口號) 發送到了該客戶單
  • 用戶瀏覽器接收到響應后開始渲染html、css,解析和執行 JavaScript 代碼
  • 當客戶端解析到 服務器發送過來的 二進制數據
  • 客戶端瀏覽器也會將 二進制數據 根據編碼類型解析成 字符串
  • 然后根據 HTTP 協議,解析服務器發送過來的 響應報文
  • 然后根據響應報文中的報文內容(報文頭、報文體)做具體的解析
  • 當瀏覽器在解析的過程中遇到 一些靜態資源時,會再次重復上面的步驟


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM