輸入URL展示過程

易木至發表於2020-04-06

一、 輸入URL,回車

  1. 敲擊某個鍵時,鍵盤內的處理器會先對鍵矩陣進行分析,然後將資料傳送到計算機
  2. 計算機接收到來自鍵盤的訊號,由鍵盤控制器(一種積體電路)進行處理,傳送給作業系統
  3. 作業系統會分析,這些資料是否為系統命令,若不是,則將資料傳給應用程式。
  4. 應用程式會分析這些資料是否為命令,如果不是命令,則會將資料作為內容接受,否則忽略

二、瀏覽器解析URL

  1. 瀏覽器會對URL進行檢查,是否合法,如果不合法會將輸入內容傳給預設的搜尋引擎
  2. 針對當前URL檢查是否存在本地快取,如果有快取就直接跳過請求階段,從快取中去取資源

瀏覽器再得到URL後,呼叫Socket,使用TCP協議,HTTP請求會被封裝,加入本地埠,目標埠等資訊 IP地址是在IP協議中被封裝的。但光有IP地址是不夠的,因為裝置是可以移動的,IP地址並不與裝置繫結。所以還有一個MAC要被封裝,每個網路卡的MAC地址都是固定且唯一的

三、DNS解析

DNS實際上是一個域名與IP對應的資料庫,DNS解析主要是為了獲取到域名對應的IP,用於下一步的連線建立

DNS的解析會按照以下順序嘗試獲取IP,任意一步找到直接返回IP:

1. 查詢瀏覽器快取,瀏覽器會對最近訪問的地址的DNS進行快取,例如chrome對每個域名會預設快取60s
2. 檢查系統快取,也就是hosts檔案中配置的域名與IP的對應關係
3. 獲取路由器的DNS快取
4. 查詢ISP服務商DNS快取,即本地伺服器快取
5. 最後手段:遞迴查詢,以 根域名伺服器 --> 頂級域名伺服器 --> 極限域名伺服器 的順序搜尋對應域名的IP
複製程式碼

通過Socket API傳送資料,可以選擇TCP或UDP協議

1. Socket(套接字)是計算機之間進行通訊的一種約定或一種方式
2. 在應用層和傳輸層之間的一個抽象層
3. 它把TCP/IP層複雜的操作抽象為幾個簡單的介面
4. 供應用層呼叫已實現程式在網路中通訊
複製程式碼

三、建立連線;

根據上一步獲取到的IP地址定位到目標主機,開始於其建立TCP連線,也就是三次握手建立連線:

  1. 第1次握手:客戶端向伺服器端傳送請求(SYN=1)等待伺服器確認;
  2. 第2次握手:伺服器收到請求並確認,回覆一個指令(SYN=1,ACK=1);
  3. 第3次握手:客戶端收到伺服器的回覆指令並返回確認(ACK=1)。

四、伺服器如何處理資料並返回資料

用上一步建立的連線傳送http request請求命令和請求頭資訊

伺服器收到資訊都會返回應答頭資訊

五、關閉TCP連線,

  • http1.1已經支援keep-alive
  • 根據Connection請求頭,如果是keep-alive伺服器就保持住tcp連線
  • response傳輸完後主動關閉tcp連線。
  • 當然現在瀏覽器都是http1.1都預設是keep-alive的,在瀏覽器tab關閉時,tcp連線關閉。

六、檢查狀態碼

如果response的狀態碼出現3XX(跳轉),未授權(401),錯誤(4XX和5XX)會有不同的處理。

七、準備呈現

如果response status 為304(內容未更改)瀏覽器則會從本來快取載入內容進行呈現

八、 瀏覽器如何處理伺服器的響應

通過MIME型別,瀏覽器知道要用頁面渲染引擎來處理HTML檔案,整個渲染過程都由瀏覽器來處理,主要分為以下步驟:

  1. 解析資原始檔(html)的原始碼,構建出一個DOM樹
  2. 解析CSS,形成css物件模型CSSOM,其中非法的css會直接被忽略掉
  3. 利用DOM和CSSOM構建一個渲染樹
  4. 根據渲染樹直接把頁面繪製到瀏覽器視窗中

根據網路模型來的過程

應用層

HTTP、DNS

傳輸層

TCP/UDP

三網路層

IP

鏈路層

相關文章