一、 輸入URL,回車
- 敲擊某個鍵時,鍵盤內的處理器會先對鍵矩陣進行分析,然後將資料傳送到計算機
- 計算機接收到來自鍵盤的訊號,由鍵盤控制器(一種積體電路)進行處理,傳送給作業系統
- 作業系統會分析,這些資料是否為系統命令,若不是,則將資料傳給應用程式。
- 應用程式會分析這些資料是否為命令,如果不是命令,則會將資料作為內容接受,否則忽略
二、瀏覽器解析URL
- 瀏覽器會對URL進行檢查,是否合法,如果不合法會將輸入內容傳給預設的搜尋引擎
- 針對當前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次握手:客戶端向伺服器端傳送請求(SYN=1)等待伺服器確認;
- 第2次握手:伺服器收到請求並確認,回覆一個指令(SYN=1,ACK=1);
- 第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檔案,整個渲染過程都由瀏覽器來處理,主要分為以下步驟:
- 解析資原始檔(html)的原始碼,構建出一個DOM樹
- 解析CSS,形成css物件模型CSSOM,其中非法的css會直接被忽略掉
- 利用DOM和CSSOM構建一個渲染樹
- 根據渲染樹直接把頁面繪製到瀏覽器視窗中
根據網路模型來的過程
應用層
HTTP、DNS
傳輸層
TCP/UDP
三網路層
IP