一、域名解析
當咱們在瀏覽器中輸入一個URL,例如」www.google.com」時,這個地址並非谷歌網站真正意義上的地址。互聯網上每一臺計算機的惟一標識是它的IP地址,所以咱們輸入的網址首先須要先解析爲IP地址,這一過程叫作DNS解析。css
DNS解析是一個遞歸查詢的過程。例如,咱們須要解析」www.google.com」時,會經歷如下步驟:html
在本地域名服務器中查詢IP地址,未找到域名;
本地域名服務器迴向根域名服務器發送請求,未找到域名;
本地域名服務器向.com頂級域名服務器發送請求,未找到域名;
本地域名服務器向.google.com域名服務器發送請求,找到該域名,將對應的IP返回給本地域名服務器。
二、TCP鏈接
HTTP協議是使用TCP協議做爲其傳輸層協議的,在拿到服務器的IP地址後,瀏覽器客戶端會與服務器創建TCP鏈接。該過程包括三次握手:瀏覽器
第一次握手:創建鏈接時,客戶端向服務端發送請求報文
第二次握手:服務器收到請求報文後,如贊成鏈接,則向客戶端發送確認報文
第三次握手,客戶端收到服務器的確認後,再次向服務器給出確認報文,完成鏈接。
三次握手主要是爲了防止已經失效的請求報文字段發送給服務器,浪費資源。服務器
三、瀏覽器發送HTTP請求
瀏覽器構建http請求報文,並經過TCP協議傳送到服務器的指定端口。http請求報文一共包括三個部分:tcp
請求行:指定http請求的方法、url、http協議版本等
請求頭:描述瀏覽器的相關信息,語言、編碼等。以下 網站
請求正文:當發送POST, PUT等請求時,一般須要向服務器傳遞數據。這些數據就儲存在請求正文中。
四、服務器處理HTTP請求
服務器處理http請求,並返回響應報文。響應報文包括三個部分:google
狀態碼:http服務經常使用的狀態碼及其含義以下
狀態碼 含義 常見示例
1** 服務器已經接受到請求,客戶端可繼續發送請求
2** 請求成功 200:請求已成功,請求所但願的響應頭或數據體將隨此響應返回。
3** 重定向 303:對應當前請求的響應能夠在另外一個 URI 上被找到,並且客戶端應當採用 GET 的方式訪問那個資源。
4** 客戶端錯誤 404:請求的網頁不存在
5** 服務器錯誤 503: 服務器超時
- 響應頭:包含了響應的相關信息,如日期等
- 響應正文:服務器返回給瀏覽器的文本信息,一般的html、js、css、圖片等就包含在這一部分裏面。編碼
五、瀏覽器頁面渲染
瀏覽器接受到http服務器發送過來的響應報文,並開始解析html文檔,渲染頁面。具體的渲染過程包括:構建DOM樹、構建渲染樹、定位頁面元素、繪製頁面元素等。具體可參看:瀏覽器時如何渲染頁面的url
六、斷開TCP鏈接
客戶端與服務器四次揮手,斷開tcp鏈接。htm
第一次揮手:客戶端想分手,發送消息給服務器第二次揮手:服務器通知客戶端已經接受到分手請求,但還沒作好分手準備第三次回收:服務器已經作好分手準備,通知客戶端第四次揮手:客戶端發送消息給服務器,肯定分手,服務器關閉鏈接