從輸入url到顯示頁面,都經歷了什麼?

咱們在打開瀏覽器訪問一個網站時 究竟都發生了什麼

  • 第一步:咱們會在瀏覽器地址欄中輸入一個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 響應url

  • 第八步,讀取頁面內容,瀏覽器渲染,解析 HTML 源碼code

  • 第九步:生成DOM樹,解析CSS樣式,js交互進程

  • 第十步:客戶端和服務器交互資源

  • 第十一步:Ajax查詢

相關文章
相關標籤/搜索