步驟
1- 輸入網址
2- 緩存解析
3- 域名解析
4- tcp連接,三次握手
5-服務器收到請求
6-頁面渲染
7-服務器收到請求
8-開始解析html
9-四次揮手斷開TCP連接
一:輸入網址
輸入你要訪問的網站網址了,俗稱url;
二:緩存解析
瀏覽器獲取了這個url,當然就去解析了,它先去緩存當中看看有沒有,從 瀏覽器緩存-系統緩存-路由器緩存 當中查看,如果有從緩存當中顯示頁面,然后沒有那就進行步驟三; 緩存就是把你之前訪問的web資源,比如一些js,css,圖片什么的保存在你本機的內存或者磁盤當中。 (1) 在chrome瀏覽器中輸入網址: chrome://chrome-urls/ chrome-urls是一個看到所有的Chrome支持的偽RUL,找到其中的chrome://appcache-internals/ 可以看見chrome的本地緩存地址:Instances in: C:\Users\User\AppData\Local\Google\Chrome\User Data\Default (0) (2)在chrome中訪問www.baidu.com/,打開開發者模式,不勾選 Disable cache
三: 域名解析
在發送http之前,需要進行DNS解析即域名解析。 DNS解析:域名到IP地址的轉換過程。域名的解析工作由DNS服務器完成。解析后可以獲取域名相應的IP地址
和步驟二一樣,做一個訪問新頁面的操作juejin.im/timeline,同樣打開開發者模式,,不勾選 Disable cache
通過域名查找對應的服務器IP
- 在本地vhosts文件中查找
- 在本地DNS服務器中查找
- 本地DNS服務器向根DNS服務器發送請求,根DNS服務器會返回一個域服務器(.com服務器)地址
- 本地DNS服務器向域服務器發送請求,域服務器返回一個域名解析服務器地址
- 本地DNS服務器向域名解析服務器發送請求,獲得服務器ip地址
- 本地DNS服務器緩存查詢結果,並告知瀏覽器
四:tcp連接,三次握手
在域名解析之后,瀏覽器向服務器發起了http請求,三次握手,瀏覽器與服務器建立TCP連接。TCP協議是面向連接的,所以在傳輸數據前必須建立連接
注意:三次握手的目的是確保通訊雙發的發送、接收消息的功能都正常
(1)客戶端向服務器發送連接請求報文; (2)服務器端接受客戶端發送的連接請求后后回復ACK報文,並為這次連接分配資源。 (3)客戶端接收到ACK報文后也向服務器端發生ACK報文,並分配資源。 這樣TCP連接就建立了。 在此之后,瀏覽器開始向服務器發送http請求,請求數據包。請求信息包含一個頭部和一個請求體。
五:服務器收到請求
服務器收到瀏覽器發送的請求信息,返回一個響應頭和一個響應體。
發送HTTP請求到達服務器,nginx作為反向代理服務器會將請求分發給web服務器
六:頁面渲染
nginx作為web服務器處理請求,如果是靜態請求js、css、圖片等,直接將靜態資源返回給客戶端;如果是動態請求.php,通過fast-cgi轉交給php-fpm,php-fpm調用cgi腳本解釋器解析腳本,得到的結果再經由fast-cgi返回給nginx,nginx將結果返回給客戶端
七、 客戶端接收到response返回結果,開始解析html,以及內嵌資源。發現有遠程資源,繼續向服務器請求資源
八、四次揮手斷開TCP連接
四次揮手的目的:確認雙發都收到斷開連接的請求。 C 發出斷開連接的請求 S ack 這個斷開請求,確保自己的數據傳輸完畢,再發送斷開連接的請求, C 收到斷開請求進入TIME-WAIT狀態,發送ack,等待2MSL后沒有再收到S的請求則完全斷開連接 S 收到C的ack后關閉連接