1.查詢DNS(域名解析),獲取域名對應的IP地址
-查詢?yōu)g覽器緩存(瀏覽器會緩存之前拿到的DNS 2-30分鐘時間),如果沒有找到,
-檢查系統(tǒng)緩存,檢查hosts文件,這個文件保存了一些以前訪問過的網(wǎng)站的域名和IP的數(shù)據(jù)。它就像是一個本地的數(shù)據(jù)庫。如果找到就可以直接獲取目標主機的IP地址了。沒有找到的話,需要
-檢查路由器緩存,路由器有自己的DNS緩存,可能就包括了這在查詢的內(nèi)容;如果沒有,要
-查詢ISP DNS 緩存:ISP服務商DNS緩存(本地服務器緩存)那里可能有相關(guān)的內(nèi)容,如果還不行的話,需要,
-遞歸查詢:從根域名服務器到頂級域名服務器再到極限域名服務器依次搜索哦對應目標域名的IP

2.瀏覽器與服務器建立tcp連接(三次握手)

3.瀏覽器向服務器端發(fā)送http請求(請求和傳輸數(shù)據(jù))
4.服務器接受到這個請求后,根據(jù)路徑參數(shù),經(jīng)過后端的一些處理生成html頁面代碼返回給瀏覽器
5.瀏覽器拿到完整的html頁面代碼開始解析和渲染,如果遇到引用的外部css、圖片等靜態(tài)資源,他們同樣也是一個個htpp請求,重復上面的步驟。
6.瀏覽器根據(jù)拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現(xiàn)給用戶。
Http 的header會給我們的請求包裝,比如AF中經(jīng)常設置的可接受的Accept(text/html)--》域名解析,根據(jù)域名找到服務器的IP --> 發(fā)起TCP的3次握手 --> 建立TCP連接后發(fā)起http請求 --> 服務器響應http請求,瀏覽器得到html代碼 --> 瀏覽器解析html代碼,并請求html代碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進行渲染呈現(xiàn)給用戶
每次都請求都會經(jīng)過? 客戶端的應用層(http協(xié)議)-->客戶端的傳輸層(tcp或udp協(xié)議)?-->客戶端的網(wǎng)絡層(ip協(xié)議)-->?客戶端的鏈路層(網(wǎng)卡,路由器等)-->?------------------經(jīng)過dns解析,穿越多個isp(互聯(lián)網(wǎng)服務提供商,移動,聯(lián)通,電信等),各種數(shù)據(jù)交換,找到了服務器------------------- 服務器的鏈路層?-->服務器的網(wǎng)絡層?-->服務器的傳輸層?-->服務器的應用層。 這個請求完成了。
服務器響應? 與請求相反,倒過來看即可。