這個過程可以分為六步
- 瀏覽器通過域名找出其IP地址(DNS解析)
- 瀏覽器和服務器建立連接(TCP/TP三次握手)
- 瀏覽器向服務器發送HTTP請求
- 服務器接受到請求並返回HTTP響應
- 瀏覽器解析渲染頁面
- 斷開連接(四次揮手)
(HTML/CSS/JS/JSON都是HTTP中的第四部分,都是基於HTTP協議來傳輸的,而HTTP協議基於TCP/IP協議)
1 瀏覽器通過域名找出其IP地址(DNS解析)
- 客戶端先檢查本地是否有對應的IP地址,若找到則返回響應的IP地址。若沒找到則請求上級DNS服務器,直至找到或到根節點。(瀏覽器緩存→系統緩存→路由器緩存→ISP DNS緩存→從根域名服務器遞歸搜索)
注意⚠️: 1 URL和域名的區別: 域名:需要注冊和購買,域名經過解析為ip地址。。。就是說用ip地址和域名都可以訪問同一資源。 url:簡單說網址=ip或域名 + 端口號 + 資源位置 + 參數 + 錨點 2 IP 地址與域名的關系: 多個提供相同服務的服務器 IP 可設置為同一個域名,但同一時刻一個域名只能解析出一個 IP地址。 一個 IP 地址可以綁定多個域名。 3 若修改hosts文件,可自己指定域名的IP,繞過DNS。
2 瀏覽器和服務器建立連接(TCP/TP三次握手)
- 瀏覽器和服務器通過三次握手建立連接,三次握手分別為:
第一次握手:相當於瀏覽器說問服務器:我可以連接你嗎? 第二次握手:相當於服務器回答說:好,連吧 第三次握手:相當於瀏覽器說:嗯,那我連接了
3 瀏覽器向服務器發送HTTP請求
- 建立連接成功后,瀏覽器給web服務器發送一個HTTP請求。
4 服務器接受到請求並返回HTTP響應
- 服務器接到請求后,會根據 HTTP 請求中的內容來決定如何獲取相應的文件,並將文件發送給瀏覽器
5 瀏覽器解析渲染頁面
- 瀏覽器根據響應開始顯示頁面
- 瀏覽器首先解析HTML文件構建DOM樹,然后解析CSS文件構建渲染樹,等到渲染樹構建完成后,瀏覽器開始布局渲染樹並將其繪制到屏幕上。
6 斷開連接(四次揮手)
- 四次揮手即終止TCP連接。斷開一個TCP連接需要客戶端和服務端發送四次數據包以確定斷開連接。這發送的四次數據包稱為四次揮手,分別為:
四次揮手: 1 Client發送一個數據包,用來關閉Client到server的數據傳輸,Client進入最后的等待狀態。 2 server接到數據包經過判斷后,發送確認信息給Client,自己進入等待關閉狀態。 3 server發送一個數據包給Client,用來關閉server到Client的數據傳輸 4 Client接收到數據經過判斷后,自己進入Time_wait狀態,server接收數據經過判斷無誤后,server進入關閉狀態,Client等待2MLS(Maxmum segment lifetime),它是任何報文在網絡丟棄前在網絡內的最長時間,過了這個時間,Client就自動關閉了。 通俗點講就是: 1 主機向服務器發送一個斷開連接的請求(不早了,我該走了); 2 服務器接到請求后發送確認收到請求的信號(知道了); 3 服務器向主機發送斷開通知(我也該走了); 4 主機接到斷開通知后斷開連接並反饋一個確認信號(嗯,好的),服務器收到確認信號后斷開連接;