從瀏覽器地址欄輸入網址,到網頁徹底打開,中間都發生了什么?


從輸入域名到網頁打開的簡單過程如下,還附加我自己的理解:

1.DNS域名解析

  客戶端輸入域名后,由DNS服務器來將域名解析成對應服務器的IP地址

2.建立TCP連接;

  獲得服務器IP之后,就需要三次握手的協議才能建立連接
    1)客戶端發送SYN包請求,等待服務器確認
    2)服務器確認收到SYN包請求后,同時自己也返回一個包給客戶端,即返回SYN+ACK
    3)客戶端收到SYN+ACK包之后,返回給服務器一個確認包ACK包表示收到,然后雙方達成協議,建立連接

3.發送HTTP請求;

  與服務器建立連接之后,就可以向服務器發送請求了,請求需要遵循http協議

4.服務器處理請求;

  被請求的服務器解析用戶請求的有哪些資源,通過服務器返回數據給客戶端

5.返回響應結果;

  給客戶端返回請求的狀態碼,通過狀態碼可以知道服務器端的處理是否正常

  常見狀態碼:狀態碼
    100 Continue 繼續,客戶端應當繼續發送請求。這個臨時響應是用來通知客戶端它的部分請求已經被服務器接收,且仍未被拒絕
    200 OK 請求成功,表示正常狀態
    301 Moved Permanently 請求的網頁已永久移動到新位置。
    400 Bad Request 語義有誤,當前請求無法被服務器理解。或者是請求參數有錯誤
    404 Not Found 請求失敗,請求所希望得到的資源未被在服務器上發現。多數情況是找不到輸入域名對應的網頁。   
    500 Internal Server Error 一般來說,這個問題都會在服務器端的源代碼出現錯誤時出現。。  

6.瀏覽器渲染:

  返回成功之后,瀏覽器拿到請求頁面的代碼,將其解析渲染出來。解析和渲染的過程主要由瀏覽器的渲染引擎實現

7. 斷開連接:

  數據傳輸完畢,需要斷開tcp連接,此時tcp發起4次揮手

  1)客戶端發送給服務器,告訴服務器需要關閉tcp了

  2)服務器發送給客戶端,告訴客戶端我准備一下就關閉

  3)服務器發送給客戶端,告訴客戶端我已經准備好關閉了

  4)客戶端發送給服務器,告訴服務器我也准備好關閉了。

 

我自己是用  "到外面吃飯" 這種方式來理解的:

1. 比如我要到某某餐館吃飯,我先在地圖上搜 餐館在哪里,然后通過導航 找到該餐館(域名解析)

2. 到達餐館過后,我想我到底要吃什么(建立連接)

  1) 摸了摸口袋里的錢,發現只有兩塊錢,然后詢問老板有沒有兩元的東西。(客戶端發送包,等待服務器確認)

  2) 老板一看我的樣子,就知道是個窮逼(服務器收到包),然后說只有饅頭價格兩元一個!(再返回一個包)

  3) 我欣喜若狂,掏出我壓箱底的兩元錢,告訴老板我要了(客戶端返回一個包),老板表示蚊子再小也是肉,就接受了這個訂單。我們快樂地達成了協議(達成協議)

3. 老板給后廚說准備一個饅頭(發送http請求)

4. 后廚收到請求之后,開始准備饅頭的材料(處理請求)

5. 沒過多久,我就拿到了熱騰騰的饅頭(返回響應結果)

6. 拿到饅頭之后我就開始了愉快的進食過程(渲染)

7. 吃飽之后就離開餐館:(斷開連接)

  1)我對老板說:老板,結賬,我准備走了

  2)老板對我說:稍等一下,馬上就來

  3)老板又對我說:一共兩元。

  4)我付了賬,對老板說:這饅頭真好吃,我下次再來。

雖然上面的過程和真實的響應過程對應起來比較牽強,但是這能夠幫助我理解什么時候是做什么事情,並不像原來一樣全靠記憶。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM