輸入一條url後,發生了什麽??
(1)瀏覽器解析
(2)查詢緩存
(3)DNS查詢
順序如下,若其中一步成功直接進去建立連接部分:
-- 瀏覽器自身DNS
-- 操作系統DNS
-- 本地hosts文件
-- 像域名服務器發送請求
(4)建立連接
-- TCP三次握手(three-way handshaking)
-- 發送方: SYN(synchonize)
-- 接受方: SYN/ACK(acknowledgement), 確認信息傳達
-- 發送方: ACK - 確認接受方再線可收消息,握手結束
Accept
-- 1, 發送端: 標有SYN的數據包發給你了
-- 2, 接收端: 明白了! 我收到你給我發的數據包了! (並發送標有SYN/ACK的數據包了)
-- 3, 明白! (發送標有ACK的數據包)
TCP三次握手的好處在於,發送方可以確認接受方仍然在線,不會因為白發送而浪費資源.
(5) 發送HTTP請求
-- 報文首部(GET/index.html HTTP/1.1)
-- 方法
-- URL
-- HTTP版本
-- 空行
-- 報文主體
註意: 1,HTTP是無連接, 無狀態的,即HTTP再傳輸完成後就會斷開,並且下一次登陸時不會記錄上次的登陸狀態
2,關於CR(Carriage Return, 回車)和LF(Line Feed, 換行)
Dos和Windows采用的CR/LF表示下一行 UNIX/Linux采用LF表示下一行 MAC OS系統采用CR表示下一行
(6)服務器發送響應
-- 報文首部(HTTP/1.1 200 ok)
-- HTTP版本
-- 響應狀態碼
-- 狀態碼信息
-- 空行(CR+LF)
-- 報文主體
(7)客戶端收到頁面
(8)解析HTML
-- 構建DOM樹
-- 下載資源
-- CSS - 構建CSSSOM樹
-- js - 等下載並執行後解析
(9)構建渲染樹
根據DOM和CSSSOM樹渲染,不可見元素不被會渲染
(10)瀏覽器布局渲染
-- 布局- 根據渲染書布局
-- 繪制 - 在屏幕上繪制每個點
輸入一條url後,發生了什麽??