第一步:輸入網址
用戶輸入網址(baidu.com),即統(tǒng)一資源定位符(URL)。
第二步:DNS解析
瀏覽器查找baidu.com網站所在的服務器IP地址。(為什么用域名不直接用IP?因為域名比較好記,有語義作用。)
瀏覽器依次從瀏覽器緩存,系統(tǒng)緩存,路由器緩存,ISP DNS緩存中查找是否有該域名和對應的IP。如果都沒有找到,則向根域名服務器查找域名及對應的IP,根域名服務器把請求轉發(fā)到下一級,直到找到IP。
第三步:發(fā)送HTTP請求
HTTP報文是包裹在TCP報文中發(fā)送的,服務器端收到TCP報文時會解包提取出HTTP報文。HTTP是明文,而HTTPS對HTTP進行了加密。這里又涉及到三次握手,四次分手。
HTTP請求報文是由三部分組成: 請求行, 請求報頭和請求正文。
第四步:服務器處理請求并返回HTTP報文
Web服務器接收用戶的處理請求并交給網站,或者接受請求反向代理到其他web服務器。后臺處理請求,封裝成HTTP報文。服務器返回給瀏覽器的文本信息,通常HTML, CSS, JS, 圖片等文件就放在這一部分。
第五步:網站處理
(MVC模型:模型model,視圖views,控制器controller)
網站接受到用戶的請求后,交給控制器處理,模型在數據庫里查找數據并返回給控制器,控制器將數據傳到視圖模版上,最后組合成一個html,再發(fā)到瀏覽器。
第六步:瀏覽器處理
html字符串被瀏覽器接受后,被讀取并解析。當解析到link標簽后重新發(fā)送請求獲取cs;當解析到script標簽后重新發(fā)送請求獲取js并執(zhí)行代碼;當解析到img標簽后發(fā)送請求獲取圖片。
瀏覽器根據html和css計算得到渲染樹,繪制到屏幕上;js將會被執(zhí)行。