我們在打開瀏覽器訪問一個網站時 究竟都發生了什么
-
第一步:我們會在瀏覽器地址欄中輸入一個url
-
第二步:瀏覽器會先查看瀏覽器快取
系統快取 -> 路由器快取
如果快取中存有先前訪問過的資料,則會直接顯示在螢屏中;沒有的話,則進行第三步操作
-
第三步:在發送http請求前,需要域名決議(DNS決議)【DNS域名系統】[可以將域名和IP地址相互映射的一個分布式資料庫],決議獲取相應的IP地址
-
第四步:瀏覽器向服務器發起TCP連接,與瀏覽器建立TCP三次握手,(TCP即傳輸控制協議,TCP連接是互聯網連接協議集的一種)
三次握手:(TCP建立連接的程序,稱為三次握手)
第一次,客戶端向服務器發送SYN同步報文段,請求建立連接
第二次,服務器確認收到客戶端的連接請求,并向客戶端發送SYN同步報文,表示要向客戶端建立連接
第三次,客戶端收到服務器端的確認請求后,處于建立連接狀態,向服務器發送確認報文
客戶端是在收到確認請求后,先建立連接
服務器是在收到最后客戶端的確認后,建立連接
發起連接請求的一定是客戶端
注意:
兩次握手的話,服務器方不確定客戶端有沒有收到報文,中途可能導致報文丟失而服務器不知,客戶端可能就會不斷發送報文,而服務器處理連接的數量是有限的,此時建立的連接會消耗大量的資源,可能會導致服務器崩潰
有連接就會有斷開,那么連接是三次握手,斷開就是四次揮手
什么是四次揮手呢?
第一次,A端像B端發送FIN結束報文段,準備關閉連接
第二次,B端確認A端的FIN,表示自己已經收到對方關閉連接的請求中間這段時間,A端停止向B端發送資料,但是B端可以向A端發送資料,要將自己未處理完任務處理完
第三次,B端向A端發送FIN結束報文段,準備關閉連接
第四次,A端確認B端的FIN,進入TIME_WAIT狀態,此時A端行程已經退出,但是連接還在
當B端收到A端的ACK之后,先斷開連接
當A端等待2 MSL之后,確認的B端接收到ACK后,再斷開連接
發起斷開連接請求的一端最后要進入有一個TIME_WAIT狀態
發起連接請求的可以是客戶端也可以是服務器端
-
第五步:握手成功后,瀏覽器向服務器發送 http 請求,請求資料包
-
第六步:服務器處理收到的請求,將資料回傳至瀏覽器
-
第七步:瀏覽器收到 HTTP 回應
-
第八步,讀取頁面內容,瀏覽器渲染,決議 HTML 原始碼
-
第九步:生成DOM樹,決議CSS樣式,js互動
-
第十步:客戶端和服務器互動
-
第十一步:Ajax查詢
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21253.html
標籤:其他
