瀏覽器解析Url

目錄

1.解析Url

  • 瀏覽器解析Url,生成發送給Web服務器的請求訊息
    • http:Url開頭表示訪問數據的協議
    • //:後面的字符串表示服務器名稱
    • /目錄名/..../文件名:表述數據源文件路徑名(Url實際上是請求服務器裡的文件資源)
  • 生成http請求信息 URL結構圖

至此瀏覽器已經解析Url並且生成HTTP消息

2.真實地址查詢-DNS

  • 委託操作系統發送請求前,需要先通過DNS服務器1查詢服務器域名對應的IP地址,才能知道通信對象地址
  • DNS域名:句點區隔,越右邊層級越高

www.server.com.

  • 最後一個.: DNS 服务器
  • .com:顶级域 DNS 服务器
  • server.com:权威 DNS 服务器
  • 根域的 DNS 伺服器資訊儲存在所有 DNS 伺服器中,所以只要客戶端能連到任何一台 DNS 伺服器,就能一步步查詢到根域,再找到目標的下層 DNS 伺服器

  • 域名解析流程 - 只指路不带路

  1. 瀏覽器先檢查自身緩存,或無則操作系統查詢hosts文件
  2. 客戶端發出 DNS 請求,詢問 www.server.com 的 IP,請求會送到本地 DNS 伺服器
  3. 如果本地 DNS 有緩存,就直接回傳 IP;沒有的話,它會去問根 DNS 如何查詢其 IP
  4. 根 DNS 回答這個 IP 屬於 .com,指路去找 .com 的頂級域名伺服器
  5. 本地 DNS 再問 .com 的伺服器是否知道 server.com 的 IP
  6. .com 的伺服器放回 server.com 的權威 DNS 地址
  7. 本地 DNS 再轉問權威 DNS www.server.com 的 IP 是什麼
  8. 權威 DNS 查詢後,回傳對應的 IP 給本地 DNS
  9. 本地 DNS 把 IP 傳回給客戶端,客戶端再去跟目標伺服器建立連線

協議棧

  • 前一步已經通過DNS拿到IP,下一步即可把HTTP的傳輸工作交給操作系統的協議棧
  • 整體分為:
    1. 應用程序(瀏覽器) - 調用socket庫
    2. 操作系統(協議棧
      • 上半部為TCP/UDP,會接受應用層的委託執行收發資料的操作
      • 下半部是IP,在互聯網上傳資料時,資料會被切分成一塊區塊的網路包,而將網路包傳送給對方的操作就是由 IP 負責的
        • ICMP:告知網絡包傳送過程中產生的錯誤以及各種控制信息
        • ARP:根據IP地址查詢相應以太網的MAC地址
    3. 驅動程序
    4. 硬件

3.建立TCP連線(含TLS)

  • 一旦拿到 IP:
    • 若是 http,會用 TCP 建立連線(預設埠號 80)
    • 若是 https,則會在 TCP 上建立 TLS(加密)連線(預設埠號 443)
  • 三次握手,確保雙方連線成功。

4.送出HTTP請求

  • 連線成功後,瀏覽器會送出一個 HTTP 請求
  • 如果有 cookie、referer、user-agent 等資訊,也會一起送出

5.伺服器回應

  • 伺服器收到請求後會回傳:
    • 狀態碼(如 200、404)
    • 回應頭(headers)
    • 回應內容(HTML、JSON、圖片等)

6.瀏覽器解析回應

  • 瀏覽器開始處理回應內容(通常是 HTML):
    1. 先建立 DOM 樹
    2. 同時載入 CSS(形成 CSSOM)
    3. 解析 JavaScript、執行
    4. 合成 render tree、計算 layout、開始繪製

7.頁面渲染

  • 當瀏覽器把 HTML、CSS、JavaScript 都處理好,就會把畫面渲染到螢幕上

Footnotes

  1. 專門保存Web服務器域名與IP的對應關係