其實這個很多大神已經說的很多了。但是為了自己更好的理解,在自己所接觸的層面上,重新對自己講解一下。當然,這是站在一個前端開發者的角度上來看問題的。
說說一次HTTP完整事務的過程
-
輸入URL
瀏覽器從URL中解析出服務器的域名
-
DNS服務器解析URL,查找IP。
- 如果有端口號的話,將端口號也解析出來
- 先從瀏覽器緩存中查找
- 再從系統系統中查找
- 再從路由器緩存中查找
- 遞歸查找...
-
構建HTTP請求包(HTTP頭,HTTP體)
-
傳輸層發送TCP連接
-
3次握手建立TCP連接成功后,發送TCP包
- TCP包發送過程中的幾個重要過程
- 窗口滑動
- 流量控制
- 擁塞處理
-
TCP包在網絡層被封裝成IP包
-
IP包在數據鏈路層被封裝成數據幀
-
數據幀在物理層被轉為比特流
-
發送方這邊就結束了, 接受方那變和這邊差不多
-
操作系統將阻塞的進程(HTTP服務器進程)喚醒,並且建立自己的子進程,子進程開始處理請求,而自己調用block原語阻塞自己。
-
處理結束后,將找到的資源封裝成HTTP響應包
-
發送給客戶端, 發送成功后,關閉連接
-
客戶端進行頁面渲染
- HTML解析器解析HTML,轉換為DOM Tree
- CSS解析器解析CSS,提取CSS Rules
- 將HTML和CSS混合為一個attachment
- attachment通過布局(layout)被轉換為一個Render Tree
- Render Tree通過繪制就顯示頁面了